快速字符串到数组复制python

2024-05-15 22:02:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把图像数据切成规则大小的屏幕块。目前我使用的方法是:

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],而不单独使用扩展或设置每个值?你知道吗


Tags: 数据方法屏幕step像素数组arrayblocky