canvas中imagedata对象的拷贝

我们在使用canvas的imagedata对象时,经常需要保留原始的imagedata对象,但是对于对象和数组来说不能简单的用一个=号赋值来保存一个当前的数组,对象和数组的赋值只是将某个变量指向了某个地址,我们改变指向同一地址的变量的时候,我们用来保存原始数据的变量其实也变了。也就是说:

a = { a : 1, b : 2};

b = a;

b.a = 3;

alert(a.a); //结果为3

对于imagedata来说更特别,因为他不是一个普通的对象,简单的通过遍历其中的属性不能实现该对象的复制,其复制的结果已经不再是一个imageData对象,用jQuery的extend也不能实现复制,要复制imageData对象就得从对象本身着手,以下是实现代码:

function copyImageData(imagedata){
     return new ImageData(new Uint8ClampedArray(imagedata.data),imagedata.width,imagedata.height);
}
  • 支付宝二维码 支付宝
  • 微信二维码 微信
相关文章