파이톤으로 색조를 계산하는 색 코드

13436 단어 Python

운영 환경


Ubuntu Stdio 18.04LTS
Python 3.6.5
파이톤의 세계지도-14(착색 도도부현)
https://qiita.com/ty21ky/items/097e0c362586109b8ca2
하지만 어떻게 해야 할지 모르겠어요.
인터넷에서 찾으면 같은 일을 하는 코드가 있는데 제 게임에서 뭘 하는지 모르겠어요.물론 잘못했으니 움직일 수 없다.
인터넷에서 검색해도 찾을 수 없고 자기가 생각해도 색깔이 잘 모르겠어요. 그래서???
신호 함수로 열 이미지 스타일의 색 변화를 재현하다
https://qiita.com/masato_ka/items/c178a53c51364703d70b
그리고 비슷한 글을 썼어요.
하지만 내 생각과는 좀 다르다.

이 도표를 보고 대체로 이해하였다.

나는 내 수준으로는 완성할 수 있을 것 같은 위의 그림으로 인코딩을 했다.
죄송합니다. 코드가 안 좋아요.
댓글창에 좋은 코드를 알려줬어요.아래의 코드를 보지 말고 주석란의 코드를 보십시오.
#!/usr/bin/python3
# coding: UTF-8

def rgb2hex(r,g,b): #RGB配列からHTMLなどに使われる16進数表現へ
    # r , g , b = 0 〜 255 # int型
    color = (r, g , b)
    html_color = '#%02X%02X%02X' % (color[0],color[1],color[2])
    return html_color

def make_color_code(n,n1,gray = False):
    #nは3の倍数とする。(3,6,9,12・・・)
    #引数:n=色数、n1=色番号、gray=False(白黒を使用しない),True(使用する)
    #n1=0とn1=nは赤色なので、n1=nは赤として使用しない。gray=Trueの時は白とする。

    if n % 3 != 0:
        return 'Error:nが3の倍数では無い'

    area1 = n/3   #0 〜 n/3
    area2 = 2/3*n #n/3 < 〜 2/3*n
    area3 = n     #2/3*n < 〜 n

    if n1 == 0:
        return '#FF0000' #赤

    elif n1 < area1:
        y1r = 255*(-3/n*n1+1)
        y1g = 255*3*n1/n
        y1b = 0
        return rgb2hex(int(y1r),int(y1g),int(y1b))

    elif n1 == n/3:
        return '#00FF00' #緑

    elif n1 < area2:
        y2r = 0
        y2g = 255*(-3*n1/n+2)
        y2b = 255*(3*n1/n-1)
        return rgb2hex(int(y2r),int(y2g),int(y2b))

    elif n1 == 2 * n / 3:
        return '#0000FF' #青

    elif n1 < area3:
        y3r = 255*(3*n1/n-2)
        y3g = 0
        y3b = 255*(-3*n1/n+3)
        return rgb2hex(int(y3r),int(y3g),int(y3b))

    elif gray: #白黒を使用する
        if n == n1:
            return '#FFFFFF' #白
        elif n+1 == n1:
            return '#F5F5F5' #whitesmoke
        elif n+2 == n1:
            return '#DCDCDC' #gainsboro
        elif n+3 == n1:
            return '#D3D3D3' #lightgray
        elif n+4 == n1:
            return '#C0C0C0' #silver
        elif n+5 == n1:
            return '#A9A9A9' #darkgray
        elif n+6 == n1:
            return '#808080' #gray
        elif n+7 == n1:
            return '#696969' #dimgray
        elif n+8 == n1:
            return '#000000' #black

    else:
        return 'Error' #エラー
#----
if __name__ == '__main__':
    #print(make_color_code(6,1,gray = False))
    for i in range(12):
        print(make_color_code(12,i,gray = False)) #色の数=12
$ ./color変化4.py
#FF0000
#BF3F00
#7F7F00
#3FBF00
#00FF00
#00BF3F
#007F7F
#003FBF
#0000FF
#3F00BF
#7F007F
#BF003F

RGB 배열을 HTML 등으로 변환하는 데 사용되는 16진수 표현의 함수는 다음과 같습니다.
색상 코드 변환
http://code.tiblab.net/python/color_code_transform
라는 코드를 그대로 사용했다.
그레이스케일의 컬러 인코딩으로 인터넷에서 찾은 물건을 직접 사용했다.URL 등이 제어를 잊어버려서 몰라요.

사용법


make_color_code (색상 수량 (int), 색상 번호 (int),gray=False)
예제
make_color_code(12,i,gray = False)
・색상의 수량은 3의 배수여야 합니다.(너무 크면 옆의 색깔과 무슨 차이가 있는지 모르겠다.)
색깔 번호는 0. - 빨간색.
12(예)까지 가능하지만 12는 빨간색이므로 사용하지 않습니다.
그레이스케일을 사용할 때 12 (예) 는 흰색으로 사용합니다.
・gray=False는 회색조를 사용하지 않습니다.
gray=True는 회색조(9가지 색상)를 사용합니다.

좋은 웹페이지 즐겨찾기