Pygame像素阵列生成

2024-05-20 17:22:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  1. 使用二维阵列

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

在这里我意识到pixArr不是一个普通的2d列表,因为我无法输出它(print pixArr)

  1. 然后我试着用射程

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

我在pygame网站HERE上发现了类似这样的代码,但它给了我错误“ValueError:sequence size mismatch”,在玩了一下之后发现它只适用于单一颜色(例如,pixArr[0:screenX*screenY]=(0,0,255)将整个屏幕涂成蓝色)

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

Tags: 函数代码infor绘制rangefunction像素
1条回答
网友
1楼 · 发布于 2024-05-20 17:22:14

我使用的是PyGame1.9.1,但在1.9.2上,PixelArrays变化很大,所以要小心。在

我刚试过这个例子,效果很好:

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

需要注意的一点是:

^{pr2}$

无法工作,因为它将PixelArray变量转换为列表(如第一段代码中所示)。在

关于你为什么得到ValueError,我只是做了一些检查,奇怪的是,我发现{}不等于{}。 我建议你在继续之前检查一下。在

编辑:

我想分享我得到的这个新片段,因为它看起来很有趣:

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

相关问题 更多 >