我正在运行以下代码:
ImageData imagedata = context.getImageData(0, 0, width, height);
Uint8ClampedArray pixelArray;
...
imagedata.data.set(pixelArray);
此代码在Chrome中运行速度很快,但在Firefox中速度很慢。 有没有更快的方法将Uint8ClampedArray写入ImageData?
答案 0 :(得分:5)
将Uint8ClampedArray写入imageData的最快方法是编写一个首先不是由getImageData获取的Uint8ClampedArray。 context.getImageData非常慢。我制作了一个test on jsPerf来说明您发布的代码的时间。第一个测试将现有数组写入imageData,而第二个测试从现有imageData读取。第二次测试占用了99%以上的时间。
那么,你能做些什么呢?
不是从context.getImageData创建Uint8ClampedArray,而是尝试通过new Uint8ClampedArray(width*height)
创建它。或者,如果您希望多次写入imageData,但只能从中读取一次,请缓存Uint8ClampedArray,不要从imageData返回的内容中重新创建它。
希望有所帮助!