当我调用时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如果任何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)但没有任何效果。
我还没有查看PIL或Pygame 的PixelArray解决方案。