使用pygame.surfarray
将图像控制为数组,对array3d
中任何元素的操作要比处理array2d
慢 5倍以上元素。
查看此基准:
from datetime import *
import pygame
image = pygame.image.load('8000x8000.png')
arr = pygame.surfarray.array3d(image)
start = datetime.now()
for y in range(8000):
for x in range(8000):
if arr[x, y, 0] != 0:
pass
end = datetime.now()
print(end - start)
在上述情况下,逐像素读取8000 x 8000图像。
array3d
返回以下格式的元素:[R,G,B]。例如:(255, 255, 255)
=白色。
在上面的示例中,使用array3d处理8000 ^ 2个元素花费的总时间为:0:01:41.996732
现在,做同样的事情,只是切换到array2d
:
...
arr = pygame.surfarray.array2d(image)
...
if arr[x, y] != 0:
...
总时间为:0:00:20.632741
。
为什么呢?