0

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

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 次执行需要 0.0045 秒,并且将其外推到 2000 多个屏幕块以填充图片分辨率需要每张图片大约 1.7 秒,这太慢了。

我希望使这个过程更快,但我不确定正确的算法是什么。我希望预先创建我的 pixelData 数组,这样我就不必每次都重新实例化它。然而,这给我留下了一个问题:在不使用扩展或附加的情况下,将像素 RGBA 值从 bmpstr 复制到数组的最快方法是什么?我需要单独设置每个值吗?这不可能是最有效的方法。

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

4

0 回答 0