索引表面支持具有alpha值(不是255)的调色板吗?

时间:2015-02-15 11:22:52

标签: python pygame alpha-transparency pygame-surface indexed-image

当我调用myIndexedSurface.get_palette()时,它会返回一个32位RGBA值列表。我认为因为包含了alpha值,所以我也可以设置和使用具有透明效果的调色板索引。然后,这些表面可以比具有全深度(32位)每像素数据的Surface更有效地覆盖或覆盖。

到目前为止,调色板元素的alpha值似乎已锁定在255,并且无法通过我尝试过的任何方法进行更改:

  • .set_palette_at(idx, (r,g,b,A))正确设置了rgb,但不管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本身无效。

我尚未查看PILPygame's PixelArray的解决方案。

1 个答案:

答案 0 :(得分:0)

正如你自己所看到的那样,它没有。你所描述的是一种新发明的方法。有四个值只是因为它在pyGame中声明了颜色值和其他一些属性。例如,如果你试试这个

S = pygame.Surface ((w,h),0,24)
r,g,b,a =S.get_masks()

你会看到四个值的元组,尽管24位表面显然只有三个字节需要处理,所以alpha只是不会通过进一步的blitting来发挥作用。如果您的后端数据最初是索引的,就像数字数组一样,我个人也会在后端使用掩码数组描述组合逻辑。