2

我正在使用 Raspberry Pi(Running 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 循环更快地访问图像中的所有像素?

谢谢!-汤米

4

2 回答 2

0

我不知道完整的答案,但有一些想法/注释:

  1. 我不确定你在用 alpha blitting 做什么。如果不需要 alpha,最好对图像的子矩形进行 blitting。我认为您正在保存一个“差异”的外部图像,让其他像素透明?

  2. 尝试使用切片表示法来访问 PixelArray 而不是元组。imgarray[x:y] = (255,255,0)vs imgarray[x, y] = (255, 255, 0)incase 阻止使用 numpy 数组。更多示例: http: //www.pygame.org/docs/ref/pixelarray.html#pygame.PixelArray

  3. PixelArray.compare (docs)使用阈值。您可能正在寻找没有阈值比较。

于 2012-10-31T01:08:45.817 回答
0

You could just loop through the pixels and only change those that dont match, you dont have to keep redrawing transparent pixels over the other ones.

于 2012-12-06T20:47:34.577 回答