当我调用myIndexedSurface.get_palette()
时,它会返回一个32位RGBA值列表。我认为因为包含了alpha值,所以我也可以设置和使用具有透明效果的调色板索引。然后,这些表面可以比具有全深度(32位)每像素数据的Surface更有效地覆盖或覆盖。
到目前为止,调色板元素的alpha值似乎已锁定在255
,并且无法通过我尝试过的任何方法进行更改:
.set_palette_at(idx, (r,g,b,A))
正确设置了r
,g
和b
,但不管A
&#39,都将alpha值保留为255 ; s值。
.set_palette(somePalette)
RGBA元组元素的alpha值不是255,则 ValueError: takes an alpha value of 255
会引发somePalette
。
我正在尝试做什么?每个palette-list元素中的alpha值是否纯粹是装饰性的,它可能更容易被其他期望32位(RGBA)像素数据而不是24(RGB)的进程使用?
我觉得Pygame中的索引曲面可能无法在开始时处理这种复杂程度,但我也无法想到或找到理由为什么不应该。也许Pygame为此目的有一个神秘的special_flags
?
我尝试通过myIndexedSurface = pygame.Surface(surfSize).convert(8)
和myIndexedSurface = pygame.Surface(surfSize, flags=pygame.SRCALPHA).convert(8)
初始化Surface本身无效。
我尚未查看PIL或Pygame's PixelArray
的解决方案。
答案 0 :(得分:0)
正如你自己所看到的那样,它没有。你所描述的是一种新发明的方法。有四个值只是因为它在pyGame中声明了颜色值和其他一些属性。例如,如果你试试这个
S = pygame.Surface ((w,h),0,24)
r,g,b,a =S.get_masks()
你会看到四个值的元组,尽管24位表面显然只有三个字节需要处理,所以alpha只是不会通过进一步的blitting来发挥作用。如果您的后端数据最初是索引的,就像数字数组一样,我个人也会在后端使用掩码数组描述组合逻辑。