我正在尝试使用 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 双精度数和 CanvasPixelArray 使用的内部无符号 8 位整数之间的转换。
- 这个猜测正确吗?
- 有没有办法减少在 CanvasPixelArray 中设置值所花费的时间?