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 値ごとに 1 バイトとして格納されます。(intのタプルを使用するオプションもあります。それぞれにほぼ同じ時間がかかるようです)。これにより、blockX、blockY および blockSizeX、blockSizeY を設定することによって表される、ピクセルのブロックの配列が作成されます。現在、blockSizeX = blockSizeY = 22 です。これは、私が行っていることに最適なサイズの画面ブロックです。

私の問題は、このプロセスが 5 回の実行で .0045 秒かかり、それを 2000 以上の画面ブロックに外挿して画像の解像度を埋めるには、画像ごとに約 1.7 秒かかり、遅すぎることです。

このプロセスを高速化しようとしていますが、適切なアルゴリズムがどうなるかわかりません。毎回それを再インスタンス化する必要がないように、pixelData 配列を事前に作成したいと考えています。ただし、これには疑問が残ります。拡張または追加を使用せずに、ピクセル RGBA 値を bmpstr から配列にコピーする最速の方法は何ですか? 各値を個別に設定する必要がありますか? それは最も効率的な方法とは言えません。

たとえば、extend を使用したり、各値を個別に設定したりせずに、値 bmpstr[0:100] を pixelData[0:100] にコピーするにはどうすればよいでしょうか?

4

0 に答える 0