你如何在Pygame中创建一个像素数组?

时间:2017-03-11 04:39:50

标签: python arrays pygame

根据docs

  

pygame.surfarray.blit_array()
  直接从数组值blit    blit_array(Surface,array) - >无
  直接复制来自的值   数组到Surface ...中   数组的大小必须与   Surface并将完全替换所有像素值。只有整数,   接受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

1 个答案:

答案 0 :(得分: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包。