2

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

不过,到目前为止,调色板元素的 alpha 值似乎已锁定,255并且不会因我尝试过的任何方法而改变:

  • .set_palette_at(idx, (r,g,b,A))正确设置rgb,但将 alpha 值保留为 255,而不管A' 值如何。

  • .set_palette(somePalette)ValueError: takes an alpha value of 255如果任何somePaletteRGBA 元组元素的 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)但没有任何效果。

我还没有查看PILPygame 的PixelArray解决方案。

4

1 回答 1

1

正如你亲眼所见,事实并非如此。你所描述的是一种新发明的方法。有四个值只是因为它在 pyGame 中声明了颜色值和其他一些属性。例如,如果你尝试这个

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

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

于 2015-02-18T16:03:11.290 回答