URLhttps://learnscript.net/zh-hant/pygame/color/
    複製連結移至說明  範例

    Color 色彩物件使用說明

    閱讀 13:48·字數 4143·發佈 
    Youtube 頻道
    訂閱 375

    Pygame 中的 Color 物件

    Pygame 套件的Color物件可用於表示遊戲中的色彩,並包含一些用於計算色彩的方法,以下是其建構子。

    Color(r, g, b, a=255)
    Color(rgbvalue)

    r 參數

    r參數是範圍從0255的整數,表示色彩中的紅色。

    g 參數

    g參數是範圍從0255的整數,表示色彩中的綠色。

    b 參數

    b參數是範圍從0255的整數,表示色彩中的藍色。

    a 參數

    a參數是範圍從0255的整數,表示色彩中的透明度,預設值為255(不透明)。

    rgbvalue 參數

    rgbvalue參數是一個包含色彩資訊的物件,他可以是字串,整數(可以書寫為容易理解的十六進位格式0xRRGGBBAA,其中RR表示紅色,GG表示綠色,BB表示藍色,AA表示透明度),Python 整數序列物件(依次包含表示紅色,綠色,藍色的整數,或包含表示紅色,綠色,藍色,透明度的整數),或另一個Color物件。

    如果rgbvalue參數是一個字串,那麽該字串可以是命名色彩的名稱(至於命名色彩,你可以參考給出的連結),或形式類似於'#RRGGBBAA''#RRGGBB''0xRRGGBBAA''0xRRGGBB'RR表示紅色,GG表示綠色,BB表示藍色,AA表示透明度)。

    pygame.Color — pygame v2.6.0 documentation

    在下面的範例中,我們建立了一些色彩物件,並將他們繪製在了表面物件中。

    create.py
    # 匯入 Color 物件
    from pygame import Color
    
    # 建立不同的色彩 red1 = Color([255, 0, 0]) red2 = Color([255, 0, 0, 100]) green1 = Color('#00FF00') green2 = Color('#00FF99') blue = Color('blue')
    # 建立遊戲視窗,使用色彩進行繪製,並等候 2 秒鐘 from pygame import display, draw, Surface, SRCALPHA s = display.set_mode((800, 600)) # 建立表面,繪製矩形,填入色彩 area = Surface((400, 400), SRCALPHA) draw.rect(area, red1, [0, 0, 100, 100]) draw.rect(area, red2, [0, 100, 100, 100]) draw.rect(area, green1, [100, 0, 100, 100]) draw.rect(area, green2, [100, 100, 100, 100]) draw.rect(area, blue, [200, 200, 100, 100])
    s.blit(area, (0, 0)) display.flip()
    import time time.sleep(2)

    取得和設定色彩資訊

    Color物件的變數rgba,可用於取得或設定色彩中的紅色,綠色,藍色以及透明度。

    color.r
    color.g
    color.b
    color.a
    color.r = r
    color.g = g
    color.b = b
    color.a = a

    r 值

    r是範圍從0255的整數,表示色彩中的紅色。

    g 值

    g是範圍從0255的整數,表示色彩中的綠色。

    b 值

    b是範圍從0255的整數,表示色彩中的藍色。

    a 值

    a是範圍從0255的整數,表示色彩中的透明度,預設值為255(不透明)。

    info.py
    from pygame import Color
    
    red = Color(255, 0, 0) print(f'紅:{red.r} 綠:{red.g} 藍:{red.b} 透明度:{red.a}') # 將色彩改為透明的 red.a = 0 print(f'透明度:{red.a}')
    紅:255 綠:0 藍:0 透明度:255
    透明度:0

    Color物件的變數cmyhsvahslai1i2i3,可使用色彩格式 CMY,HSVA,HSLA,I1I2I3 來取得或設定色彩資訊。

    color.cmy
    color.hsva
    color.hsla
    color.i1i2i3
    color.cmy = cmy
    color.hsva = hsva
    color.hsla = hsla
    color.i1i2i3 = i1i2i3

    cmy 值

    cmy是一個形式類似於(C,M,Y)的 Python 浮點數元組,其中C表示青色,M表示品紅,Y表示黃色,他們的取值範圍是01

    hsva 值

    hsva是一個形式類似於(H,S,V,A)的 Python 浮點數元組,其中H表示色調,取值範圍是0360S表示飽和度,取值範圍是0100V表示明度,取值範圍是0100A表示透明度,取值範圍是0100

    hsla 值

    hsla是一個形式類似於(H,S,L,A)的 Python 浮點數元組,其中HSA所表示的含義和取值範圍與hsva相同,L表示亮度,取值範圍是0100

    這裏需要指出,雖然hsla中的Shsva中的S含義相同,但計算方式卻存在差異,因此同一個色彩在 HSVA 和 HSLA 格式中的飽和度不一定相同。

    i1i2i3 值

    i1i2i3是一個形式類似於(I1,I2,I3)的 Python 浮點數元組,其中I1取值範圍是01I2取值範圍是-0.50.5I3取值範圍是-0.50.5

    info.py
    # 以 CMY 格式取得和設定色彩資訊
    color1 = Color('#3399ff')
    print(f'cmy:{color1.cmy} 紅:{color1.r} 綠:{color1.g} 藍:{color1.b}')
    color1.cmy = (0.81, 0.4123, 0.0001)
    print(f'cmy:{color1.cmy} 紅:{color1.r} 綠:{color1.g} 藍:{color1.b}')
    
    # 顯示 HSVA,HSLA,I1I2I3 格式的色彩資訊 color2 = Color((200, 100, 50, 25)) print(f'hsva:{color2.hsva}') print(f'hsla:{color2.hsla}') print(f'i1i2i3:{color2.i1i2i3}')
    cmy:(0.8, 0.4, 0.0) 紅:51 綠:153 藍:255
    cmy:(0.8117647058823529, 0.4156862745098039, 0.0039215686274509665) 紅:48 綠:149 藍:254
    hsva:(20.0, 75.0, 78.43137254901961, 9.803921568627452)
    hsla:(20.0, 60.00000000000001, 49.01960784313725, 9.803921568627452)
    i1i2i3:(0.45751633986928103, 0.29411764705882354, -0.049019607843137254)

    更新色彩資訊

    Color物件的update方法,可用於更新色彩中的紅色,綠色,藍色以及透明度資訊,其參數的含義和作用與Color類別的建構子相同,你可以檢視Color 物件一段來了解他們。

    update(r, g, b, a=255)
    update(rgbvalue)

    update 方法可能不會更新色彩的透明度

    如果你僅為update方法提供參數rgb,而沒有提供表示透明度的參數a,那麽色彩的透明度不會發生變化。

    當然,上述情況不適用於參數rgbvalue,如果參數rgbvalue未包含透明度,那麽將采用預設透明度。

    update.py
    from pygame import Color
    
    blue = Color(0, 0, 255, 100) # 由於沒有提供參數 a,因此透明度不會發生變化 blue.update(0, 255, 0) print(f'透明度:{blue.a}') # 透明度會發生變化 blue.update('red') print(f'透明度:{blue.a}')
    透明度:100
    透明度:255

    以 RGBA 格式取得色彩資訊

    Color物件的normalize方法,可用於取得 RGBA 格式的色彩資訊。

    normalize()

    傳回值

    normalize方法的傳回值是一個形式類似於(R,G,B,A)的 Python 浮點數元組,其中R為紅色,G為綠色,B為藍色,A為透明度,他們的範圍是01

    info.py
    # …
    # 顯示 RGBA 格式的色彩資訊
    print(Color([50, 150, 250, 100]).normalize())
    (0.19607843137254902, 0.5882352941176471, 0.9803921568627451, 0.39215686274509803)

    對色彩進行伽瑪校正

    Color物件的correct_gamma方法,可用於對色彩進行伽瑪校正。

    correct_gamma(gamma)

    gamma 參數

    gamma參數是一個表示伽瑪值的浮點數,將采用該伽瑪值對色彩進行校正。

    傳回值

    correct_gamma方法的傳回值是經過伽瑪校正的新的Color色彩物件。

    gamma.py
    from pygame import Color
    
    # 對色彩進行伽瑪校正 c = Color(255, 150, 50, 100) print(c.correct_gamma(1.5))
    (255, 115, 22, 63)

    將色彩轉換為灰階版本

    Color物件的grayscale方法,可將色彩進行灰階轉換,並將轉換結果作為新的色彩物件傳回。

    grayscale()

    傳回值

    grayscale方法的傳回值是經過灰階轉換的新的Color色彩物件。

    grayscale.py
    from pygame import Color
    
    # 將色彩轉換為灰階版本 c = Color(255, 150, 50, 100) print(c.grayscale())
    (169, 169, 169, 100)

    計算色彩與其他色彩的插補

    Color物件的lerp方法,可用於計算Color物件所表示的色彩與指定色彩之間的線性插補,並將計算結果作為新的色彩物件傳回。計算色彩的線性插補,可用於產生一些線性漸層效果,或產生效果接近的色彩。

    lerp(color, amount)

    color 參數

    color參數與Color物件的建構子的rgbvalue參數類似(你可以檢視Color 物件一段來了解更多),是一個包含色彩資訊的物件,他將參與插補計算。

    amount 參數

    amount參數是一個浮點數,取值範圍從01,越接近於0,色彩插補越接近於Color物件自身,越接近於1,色彩插補越接近於參數color

    傳回值

    lerp方法的傳回值是包含線性插補計算結果的新的Color色彩物件。

    lerp.py
    from pygame import Color
    
    # 計算白色與黑色之間的線性插補 c = Color(255, 255, 255) print(f'amount:{c.lerp("#000000", 0.1)}') print(f'amount:{c.lerp("#000000", 0.9)}')
    amount:(230, 230, 230, 255)
    amount:(25, 25, 25, 255)

    預先計算色彩的透明度

    Color物件的premul_alpha方法,可預先將色彩中的透明度與紅色,綠色,藍色進行計算,並將計算結果作為新的色彩物件傳回。預先計算透明度對於混合模式BLEND_PREMULTIPLIED非常有效,因為該模式認為色彩中的紅色,綠色,藍色已經與透明度進行了計算,這可以在一定程度上改進算繪的效率。

    premul_alpha()

    傳回值

    premul_alpha方法的傳回值是預先計算了透明度的新的Color色彩物件,該色彩物件的透明度與原有透明度相同。

    premul_alpha.py
    from pygame import Color
    
    # 預先計算透明度 c = Color(150, 20, 200, 50) print(c.premul_alpha())
    (29, 4, 39, 50)

    對 Color 物件進行算術運算

    Color物件支援使用算術運算子+-*//%,與另一個Color物件進行加法,減法,乘法,整除,取余運算。運算的規則為,將兩個Color物件的rgba變數分別進行計算,計算結果大於255則被視為255,計算結果小於0則被視為0,然後,根據計算結果產生一個新的色彩物件,新的色彩物件將作為運算式的傳回值。

    color1 + color2
    color1 - color2
    color1 * color2
    color1 // color2
    color1 % color2

    operations.py
    from pygame import Color
    
    color1 = Color(100, 120, 200) color2 = Color([50, 200, 90, 100])
    # 在色彩物件之間,進行加,減,乘運算 print(f'{color1} + {color2} = {color1 + color2}') print(f'{color1} - {color2} = {color1 - color2}') print(f'{color1} * {color2} = {color1 * color2}')
    # 在色彩物件之間,進行整除運算 print(f'{color1} // {color2} = {color1 // color2}')
    # 在色彩物件之間,進行取余運算 print(f'{color1} % {color2} = {color1 % color2}')
    (100, 120, 200, 255) + (50, 200, 90, 100) = (150, 255, 255, 255)
    (100, 120, 200, 255) - (50, 200, 90, 100) = (50, 0, 110, 155)
    (100, 120, 200, 255) * (50, 200, 90, 100) = (255, 255, 255, 255)
    (100, 120, 200, 255) // (50, 200, 90, 100) = (2, 0, 2, 2)
    (100, 120, 200, 255) % (50, 200, 90, 100) = (0, 120, 20, 55)

    Color 物件之間的整除和取余運算允許除數為 0

    在正常的 Python 整除和取余運算中,除數不能夠為0,否則會引發例外狀況ZeroDivisionError,但Color物件之間的整除和取余運算卻允許此情況的發生,當作為除數的rgba變數為0時,運算的結果為0

    operations.py
    # …
    # 除數為 0 的情況
    print(Color(0xFFFFFFFF) // Color(0x00000000))
    print(Color(0xFFFFFFFF) % Color(0x00000000))
    (0, 0, 0, 0)
    (0, 0, 0, 0)

    對 Color 物件進行比較運算

    使用比較運算子==可比較兩個Color物件是否相等,如果運算式傳回True則表示相等。使用比較運算子!=可比較兩個Color物件是否不相等,如果運算式傳回True則表示不相等。

    比較運算的規則為,將兩個Color物件的rgba變數分別進行比較,如果全部相等,則認為兩個Color物件相等。

    color1 == color2
    color1 != color2

    operations.py
    # …
    # 比較兩個色彩
    color3 = Color(100, 120, 200, 200)
    print(f'{color1} == {color3} {color1 == color3}')
    print(f'{color1} != {color2} {color1 != color2}')
    (100, 120, 200, 255) == (100, 120, 200, 200) False
    (100, 120, 200, 255) != (50, 200, 90, 100) True

    原始碼

    src/zh-hant/color·codebeatme/pygame·GitHub

    講解影片

    Pygame 建立、變更色彩(Color 物件)·YouTube