首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pixel阵列发生器

Pixel阵列发生器
EN

Stack Overflow用户
提问于 2015-04-29 13:45:18
回答 1查看 1.9K关注 0票数 1

我试图用Python (2.7.9)中的生成器绘制函数和图形,但发现了一个问题:我无法将生成的像素数据(RGB元组)刷新到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

在这里,我意识到pixArr不是一个普通的2d列表,因为我没有输出它(打印pixArr)

  1. 然后我试着使用范围 pixArr[0:screenX*screenY] = [(0,0,function(curPix%screenX, curPix//screenY)) for curPix in range(0,screenX*screenY)]

我在游戏网站这里上找到了类似的代码,但是它给了我错误的"ValueError:序列大小错配“,在玩了它之后,很明显它只适用于单一的颜色(例如,pixArr[0:screenX*screenY]=(0,0,255)将整个屏幕的颜色变为蓝色)。

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

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

发布于 2015-04-29 15:51:10

我使用的是吡游1.9.1,但是PixelArrays似乎在1.9.2上改变了很多,所以要小心。

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

代码语言:javascript
运行
复制
pixArr = pygame.PixelArray(surface)
def f(i):
    return i % 255
pixArr[:] = [(0, 0, f(i)) for i in range(0, len(pixArr))]

有一件事需要注意,那就是:

代码语言:javascript
运行
复制
pixArr = [(0, 0, f(i)) for i in range(0, len(pixArr))]

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

关于您为什么要获得ValueError,我只是做了一些检查,奇怪的是(而且非常明显),我注意到len(pixArray)不等于pixArray.surface.get_width() * pixArray.surface.get_height()。我劝你在你继续之前先检查一下。

--

编辑:

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

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29945638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档