快速字符串到数组复制python

时间:2013-10-02 05:11:40

标签: python arrays bitmap

我正在寻找将图像数据剪切成常规大小的屏幕块。目前我一直在使用的方法是:

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值存储为一个字节。 (我也可以选择使用一个整数元组。它们似乎花费大约相同的时间)。这将创建一个像素块的数组,通过设置blockX,blockY和blockSizeX,blockSizeY来描述。目前blockSizeX = blockSizeY = 22,这是我正在做的最佳尺寸屏幕块。

我的问题是这个过程每5次执行需要.0045秒,并且将其推断到2000+屏幕块以填充图像分辨率需要每张图片大约1.7秒,这太慢了。

我希望让这个过程更快,但我不确定适当的算法是什么。我希望我的pixelData数组预先创建,所以我不必每次都重新实例化它。然而,这给我留下了一个问题:将像素RGBA值从bmpstr复制到数组的最快方法是什么,而不使用extend或append?我需要单独设置每个值吗?这不是最有效的方式。

例如,如何在不使用扩展或单独设置每个值的情况下将值bmpstr [0:100]复制到pixelData [0:100]中?

0 个答案:

没有答案