我想把图像数据切成规则大小的屏幕块。目前我使用的方法是:
def getScreenBlocksFastNew(bmpstr):
pixelData = array.array('c')
step = imgWidth * 4
pixelCoord = (blockY * blockSizeY * imgWidth +
blockSizeX * blockX)* 4
for y in range(blockSizeY):
pixelData.extend( bmpstr[pixelCoord : pixelCoord + blockSizeX * 4] )
pixelCoord += step
return pixelData
bmpstr是原始像素数据的字符串,以每个RGBA值一个字节的形式存储。(我还可以选择使用int的元组。他们似乎需要大约相同的时间为每个)。这将创建一个像素块数组,通过设置blockX,blockY和blockSizeX,blockSizeY来描述。当前blockSizeX=blockSizeY=22,这是我正在做的事情的最佳屏幕块大小。你知道吗
我的问题是,这个过程每5次执行需要0.0045秒,而将其外推到2000多个屏幕块以填充图片分辨率需要大约1.7秒,这太慢了。你知道吗
我希望使这个过程更快,但我不确定什么是正确的算法将。我期待有我的pixelData数组预先创建,这样我就不必每次重新实例化它。然而,这给我留下了一个问题:不使用extend或append,将像素RGBA值从bmpstr复制到数组的最快方法是什么?我需要单独设置每个值吗?那不是最有效的方法。你知道吗
例如,如何将值bmpstr[0:100]复制到pixelData[0:100],而不单独使用扩展或设置每个值?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐