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

4
根据文档

pygame.surfarray.blit_array()
直接从数组值绘制
blit_array(Surface, array) -> None
直接将数组的值复制到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

这个 [(255,241,232),(255,241,232),...] 是确切的代码还是你为了可读性而粘贴在这里的? - ZdaR
@ZdaR 这是被截断的。实际数组大小为500 * 300 * 3。 - Jet Blue
1个回答

3
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包时,此模块才可用。


啊,我明白了。谢谢! - Jet Blue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接