0
我正在嘗試將uint8
alpha值(醃漬數組here)的一個numpy數組應用到表面,但我一直得到ValueError: unsupported colormasks for alpha reference array
。爲什麼pygame.surfarray.pixels_alpha會引發ValueError?
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
文檔字符串提到一個32位Surface
與每個像素的α值是必需的。我用Surface.get_bitsize
檢查了表面位的大小,並確認它返回32
。這就是說,我不知道如何檢查它是否具有每個像素的alpha值。這可能是問題嗎?如果是這樣,我該如何檢查?如果不是,我錯過了什麼?
謝謝!
你又來了!像魅力一樣工作,謝謝!你碰巧知道這個每像素alpha業務究竟是什麼? – blz
並不特別。不具有每像素阿爾法允許更快的blits,但我不確定爲什麼默認情況下使用32位。 //還請注意更新的答案。 – Veedrac
感謝您的更新。這確實簡化了很多事情!我現在有另外一個(相關)問題,我已經在一個單獨的問題中發佈了。如果你有時間,你可以看看嗎?謝謝! http://stackoverflow.com/questions/19058022/why-is-surface-unlock-failing-to-unlock-the-surface-for-blitting – blz