为什么pygame.surfarray.pixels_alpha会抛出ValueError?

时间:2013-09-27 18:26:03

标签: python pygame alpha

我正在尝试将一小块uint8 alpha值(腌制数组here)应用于曲面,但我不断得到ValueError: unsupported colormasks for alpha reference array

s = pygame.Surface((100, 100))
s.fill((126, 126, 126))  # make it grey
pxa = pg.surfarray.pixels_alpha(s)

以下是完整的追溯:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-81-8c19259f8aa5> in <module>()
----> 1 pxa = pg.surfarray.pixels_alpha(s)

/usr/lib/python2.7/dist-packages/pygame/surfarray.pyc in pixels_alpha(surface)
    206         return numericsf.pixels_alpha (surface)
    207     elif __arraytype == "numpy":
--> 208         return numpysf.pixels_alpha (surface)
    209     raise NotImplementedError("surface arrays are not supported")
    210 

/usr/lib/python2.7/dist-packages/pygame/_numpysurfarray.pyc in pixels_alpha(surface)
    295         start = 3
    296     else:
--> 297         raise ValueError("unsupported colormasks for alpha reference array")
    298 
    299     array = numpy.ndarray \

ValueError: unsupported colormasks for alpha reference array

pixels_alpha docstring提到需要具有每像素alpha值的32位Surface。我使用Surface.get_bitsize检查了表面位大小,并确认它返回32。话虽这么说,我不知道如何检查它是否具有每像素alpha值。这可能是问题吗?如果是这样,我该如何检查?如果没有,我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

您应该使用每像素alpha初始化:

surface = pygame.Surface((100, 100), flags=pygame.SRCALPHA)

这不需要初始化显示。


旧回答:

你需要它具有每像素alpha,即使对于32位图像也不是自动的:

surface = pygame.Surface((100, 100)).convert_alpha()

要使用convert_alpha,您需要初始化显示:

pygame.display.set_mode((X, Y))