当我调用时myIndexedSurface.get_palette()
,它会返回一个 32 位 RGBA 值的列表。我想因为其中包含一个 alpha 值,所以我也可以设置和使用具有透明效果的调色板索引。然后,这些表面可以比具有全深度(32 位)每像素数据的表面更有效地作为覆盖或掩码进行 blitted。
不过,到目前为止,调色板元素的 alpha 值似乎已锁定,255
并且不会因我尝试过的任何方法而改变:
.set_palette_at(idx, (r,g,b,A))
正确设置r
、g
和b
,但将 alpha 值保留为 255,而不管A
' 值如何。.set_palette(somePalette)
ValueError: takes an alpha value of 255
如果任何somePalette
RGBA 元组元素的 alpha 值不是 255,则引发。
我正在尝试做的事情可能吗?每个调色板列表元素中的 alpha 值是否纯粹是装饰性的,它可能更容易被其他需要 32 位 (RGBA) 像素数据而不是 24 (RGB) 像素数据的进程使用?
我觉得 Pygame 中的索引表面可能一开始就无法处理这种程度的复杂性,但我也想不出或找到不应该这样做的原因。special_flags
也许 Pygame为此目的有其神秘之处?
我尝试通过初始化 Surface 本身myIndexedSurface = pygame.Surface(surfSize).convert(8)
,myIndexedSurface = pygame.Surface(surfSize, flags=pygame.SRCALPHA).convert(8)
但没有任何效果。
我还没有查看PIL或Pygame 的PixelArray
解决方案。