2013-09-27 2 views
0

알파 값 (절임 배열 here)의 숫자가 작은 배열을 표면에 적용하려고 시도했지만 계속 ValueError: unsupported colormasks for alpha reference array이 표시됩니다.pygame.surfarray.pixels_alpha가 ValueError를 던지는 이유는 무엇입니까?

--------------------------------------------------------------------------- 
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가 필요하다고 언급 :

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

여기서 전체 추적한다. 표면 비트 수를 Surface.get_bitsize으로 확인하고 32을 반환하는 것으로 확인했습니다. 즉, 픽셀 당 알파 값이 있는지 확인하는 방법을 모릅니다. 이게 문제일까요? 그렇다면 어떻게 확인합니까? 그렇지 않다면 나는 무엇을 놓치고 있습니까?

감사합니다. 당신은 픽셀 단위의 알파 초기화해야

답변

1

는 :

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

이것은 초기화 디스플레이를 필요로하지 않습니다.


올드 대답 : 당신은 심지어 32 비트 이미지에 대한 자동 아니다 픽셀 단위의 알파, 가질 필요

:

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

그리고 convert_alpha를 사용하는 당신 디스플레이를 초기화해야합니다.

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

다시 한번! 매력처럼 작동합니다, 감사합니다! 픽셀 당 알파 비즈니스가 정확히 무엇인지 알고 계십니까? – blz

+1

특히. 픽셀 당 알파가 없으면 블리트가 훨씬 빨라지지만이 경우 기본적으로 32 비트가 사용되는 이유는 잘 모르겠습니다. // 또한 업데이트 된 답변에 유의하십시오. – Veedrac

+0

감사합니다. 그것은 많은 일을 단순화합니다! 나는 지금 또 다른 (관련) 문제가 있는데, 나는이 질문을 별도의 질문에 게시했다. 시간이 있으시면 좀 봐 주시겠습니까? 감사! http://stackoverflow.com/questions/19058022/why-is-surface-unlock-failing-to-unlock-the-surface-for-blitting – blz

관련 문제