我正在使用Raspberry Pi(运行Rasbian Wheezy)开展艺术项目。我正在进行游戏中时光倒流,只更换已更改的图像区域。
当使用alpha通道从两个不同阵列的像素创建PixelArray以确定使用哪个像素时,处理器被最大化并且运行速度非常慢:
alphachannelarray = basearray.compare(imgarray, distance=0.08, weights=(0.01, 0.01, 0.01))
alphachannel = alphachannelarray.make_surface()
for col in range (0, 800):
for cell in range (0, 600):
if alphachannelarray[col, cell] == alphachannel.map_rgb ((0,0,0)):
imgarray[col, cell] = imgoldarray[col,cell] #if alpha channel is black use imgold pixel
elif alphachannelarray[col, cell] == alphachannel.map_rgb ((255,255,255)):
imgarray[col, cell] = imgarray[col][cell] #il alpha channel is white use img pixel
pygame中有没有办法比for循环更快地访问图像中的所有像素?
谢谢! -Tommy
答案 0 :(得分:0)
我不知道完整的答案,但有一些想法/说明:
我不确定你在使用alpha blitting做了什么。如果你不需要alpha,你可能最好不要使用图像的子矩形。我认为你正在保存一个“差异”的外部图像,让其他像素保持透明?
尝试使用切片表示法来访问PixelArray而不是元组。 imgarray[x:y] = (255,255,0)
vs imgarray[x, y] = (255, 255, 0)
可防止使用numpy数组。更多示例:http://www.pygame.org/docs/ref/pixelarray.html#pygame.PixelArray
PixelArray.compare (docs)使用阈值。您可能正在寻找没有阈值比较。
答案 1 :(得分:0)
您可以循环显示像素并仅更改那些不匹配的像素,您不必将透明像素重绘为其他像素。