Pygame像素阵列生成器

时间:2015-04-29 13:45:19

标签: python arrays pygame generator pixel

我正在尝试使用Python(2.7.9)中的生成器绘制函数和图形,并发现了一个问题:我无法将生成的像素数据(RGB元组)刷新为Pygame Pixel数组。这是我的代码(我试图运行):

  1. 使用2d数组

    pixArr = pygame.PixelArray(surface) pixArr=[[(0,0,function(x,y)) for x in range(1,screenX)] for y in range(1,screeny)] del pixArr

  2. 这里我已经意识到pixArr不是普通的2d列表因为我输出失败(打印pixArr)

    1. 然后我尝试使用范围

      pixArr[0:screenX*screenY] = [(0,0,function(curPix%screenX, curPix//screenY)) for curPix in range(0,screenX*screenY)]

    2. 我在pygame网站HERE上找到了类似这样的代码,但是它给了我错误“ValueError:sequence size mismatch”,在玩完之后它变得清晰,它只能用一种颜色(对于示例pixArr[0:screenX*screenY]=(0,0,255)将整个屏幕着色为蓝色)

      TL; DR:如何在不使用循环的情况下设置每个像素

      For y in range(0,1000):
          For x in range(0,1000):
              gfx.draw(surface,x,y,(0,0,function(a,b))) #or pixArr in this line
      

1 个答案:

答案 0 :(得分:0)

我正在使用pygame 1.9.1,但似乎PixelArrays在1.9.2上发生了很大的变化,所以要小心。

我刚试过这个例子,它运行正常:

pixArr = pygame.PixelArray(surface)
def f(i):
    return i % 255
pixArr[:] = [(0, 0, f(i)) for i in range(0, len(pixArr))]

需要注意的一点是:

pixArr = [(0, 0, f(i)) for i in range(0, len(pixArr))]

不起作用,因为它将PixelArray变量转换为列表(如第一段代码中所示)。

为什么你得到一个ValueError,我只是做了一些检查,并且好奇(并且足够过分),我注意到len(pixArray)不等于pixArray.surface.get_width() * pixArray.surface.get_height()。 在你继续之前,我建议你对此进行一些检查。

-

编辑:

我想要分享这个新的片段,因为它看起来非常有趣:

def f(i):
    return i % 255
length = len(pixArr)
length2 = len(pixArr[0])
print length, length2
for j in range(0, length):
    array = [(0, f(j), f(i)) for i in range(0, length2)]
    pixArr[j] = array