2017-03-11 42 views
1

按照docs如何在Pygame中創建一個像素數組?

pygame.surfarray.blit_array()
BLIT直接從數組值
blit_array(表面,陣列) - >無
直接從 值複製將數組轉換爲曲面...
該數組必須與 曲面的維數相同,並將完全替換所有像素值。只有整數, ascii字符和記錄數組被接受。

我的代碼如下,

surf = pygame.display.set_mode((width, height)) 
pixels = [ 
    # width * height * 3 
    [(255,241,232),(255,241,232),...], 
    [(255,241,232),(255,241,232),...], 
    ... 
] 
surfarray.blit_array(surf, pixels) 

運行它,我得到的錯誤ValueError: list object does not export an array buffer

我在做什麼錯?



下面是完整的錯誤消息,

line 23, in <module>  
    surfarray.blit_array(surf, pixels) 
line 81, in blit_array 
    return numpysf.blit_array (surface, array) 
line 82, in blit_array 
    return array_to_surface(surface, array) 
ValueError: list object does not export an array buffer 
+0

這是'[(255,241,232),(255,241,232),...]'確切的代碼,或者您爲了可讀性而在此粘貼 – ZdaR

+0

@ZdaR它被截斷。實際的數組大小爲500 * 300 * 3 –

回答

2

pygame.surfarray.blit_array()數組必須是任何陣列對象,或者一個或np.array數字數組。從列表中進行陣列不會在這種情況下工作,但你可以這樣做:

import numpy as np 
pixels = np.array([ 
    [(255,241,232),(255,241,232)], 
    [(255,241,232),(255,241,232)] 
]) 
#rest the same... 

哪個列表數組轉換爲np.array

在文檔pygame.surfarray它指出:

在pygame曲面和數組之間轉換像素數據的函數。 只有當pygame可以使用外部 Numpy包時,此模塊纔會有效。

+0

啊,我明白了。謝謝! –

相關問題