0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pythonでhsv2rgb

Posted at

pythonにはcolorsysとかいう便利な機能が内蔵されているようだが、m5stackなmicro pythonにはなかった。hsv2rgbのpythonコードなんて探せばある(車輪の再発明)かもしれないが、探すのが面倒だしちゃんと動くかわからないので自作した。(自分で記事を書いたことがあるという記憶があればいつでも自分の記事を参照できて便利!)

def hsv2rgb(h,s,v,Hrange=360,Srange=100,Vrange=100):
    if Hrange<=0 or Srange<=0 or Vrange<=0 or s<0 or v<0 or s>Srange or v>Vrange:
        print(f"INVALID INPUT. Your input:\n{h} {s} {v} {Hrange} {Srange} {Vrange}")
        return(0,0,0)
    if h<0:
        print(f"get H value:{h} to ",end="")
        while h<0: #-1が来たら359と解釈
            h+=Hrange
        print(f"interpreted:{h}")
    elif h>Hrange:
        print(f"get H value:{h} to ",end="")
        h%=Hrange #361という入力が来たら1と解釈
        print(f"interpreted:{h}")
    Hrange=Hrange/6 #~60°~120°~180°~240°~300°~360°の6段階でわけなきゃいけない
    MAX=v/Vrange*255 #明度はその色の最大値
    MIN=MAX-((s/Srange)*MAX) #彩度がMAXなら原色なのでRGBのいずれかが0になる
    if h<Hrange*1: #~60°(赤~黄)
        R=MAX
        G=(h           /Hrange)*(MAX-MIN)+MIN  #hが0なら原色赤(G=0)、hが60なら原色黄色(G=255)
        B=MIN
    elif h<Hrange*2: #60~120°(黄~緑)
        R=((Hrange*2-h)/Hrange)*(MAX-MIN)+MIN #hが60なら原色黄色(R=255)、hが120なら原色緑(R=0)。120から引いて60で割るとちょうど計算できる
        G=MAX
        B=MIN
    elif h<Hrange*3: #120~180°(緑~水色)
        R=MIN
        G=MAX
        B=((h-Hrange*2)/Hrange)*(MAX-MIN)+MIN #hが120なら緑(B=0)、hが180なら水色(B=255)。120を引く
    elif h<Hrange*4: #180~240°(水色~青)
        R=MIN
        G=((Hrange*4-h)/Hrange)*(MAX-MIN)+MIN #hが180なら水色(G=255)、hが240なら青(G=0)。240から引く
        B=MAX
    elif h<Hrange*5: #240~300°(青~赤紫)
        R=((h-Hrange*4)/Hrange)*(MAX-MIN)+MIN #hが240なら青(R=0)、hが300なら赤紫(R=255)
        G=MIN
        B=MAX
    else: #300~360°
        R=MAX
        G=MIN
        B=((Hrange*6-h)/Hrange)*(MAX-MIN)+MIN
    R=int(R)
    G=int(G)
    B=int(B)
    return (R,G,B)

無駄にエラーチェックてきなものを入れてるが不要な場合各自で削除してくれ!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?