是的,我知道 .getImageData()
我的意思是,比方说,我必须更改一些像素:
var imageData = ctx.getImageData(...);
似乎,这种方法给了我全新的“真实”(隐藏在我深处)图像数据的副本。我这么说是因为如果你创建一个新的:
var imgData2 = ctx.getImageData(.../*same parameters as before*/);
并比较两个缓冲区:
imageData.data.buffer === imgData2.data.buffer; //false
所以,每次它从它的位图创建新副本。天哪,为什么?好吧,再进一步:
/*...apply some new changes to the imageData in a loop...*/
上面没什么特别的。但是现在,是时候把它放回去了:
ctx.putImageData(imageData, ...);
而这个内部本身运行新循环并复制我的 imageData。
这么多额外的工作!有没有办法获得实际的 imageData 并在没有 get/put 的情况下对其进行操作?如果没有 - 我再问一次 - 为什么?是安全原因吗?他们害怕我可以用这些像素做什么?
谢谢!