我们在使用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); }