HTML 5 キャンバスのピクセル操作を使用して動的な視覚効果を実行しようとしていますが、CanvasPixelArray でのピクセルの設定が非常に遅いという問題に直面しています。
たとえば、次のようなコードがある場合:
imageData = ctx.getImageData(0, 0, 500, 500);
for (var i = 0; i < imageData.length; i += 4){
imageData.data[i] = buffer[i];
imageData.data[i + 1] = buffer[i + 1];
imageData.data[i + 2] = buffer[i + 2];
}
ctx.putImageData(imageData, 0, 0);
Chrome でプロファイリングすると、CanvasPixelArray が使用されていない次のコードよりも 44% 遅く実行されることがわかります。
tempArray = new Array(500 * 500 * 4);
imageData = ctx.getImageData(0, 0, 500, 500);
for (var i = 0; i < imageData.length; i += 4){
tempArray[i] = buffer[i];
tempArray[i + 1] = buffer[i + 1];
tempArray[i + 2] = buffer[i + 2];
}
ctx.putImageData(imageData, 0, 0);
私の推測では、この速度低下の理由は、JavaScript の double と、CanvasPixelArray で使用される内部の符号なし 8 ビット整数との間の変換によるものです。
- この推測は正しいですか?
- CanvasPixelArray で値を設定するのにかかる時間を短縮する方法はありますか?