2012-06-14 179 views
6

这是行得通的,但我觉得这段代码很长。 我在寻找更好的主意。如何克隆ImageData?

var clone = function(imageData) { 
    var canvas, context; 
    canvas = document.createElement('canvas'); 
    canvas.width = imageData.width; 
    canvas.height = imageData.height; 
    context = canvas.getContext('2d'); 
    context.putImageData(imageData, 0, 0); 
    return context.getImageData(0, 0, imageData.width, imageData.height); 
}; 
+0

[由JavaScript值复制的imageData]的可能的复制(http://stackoverflow.com/questions/5642383/copy-imagedata-by-value-in-javascript) – brichins

回答

8

TypedArray.prototype.set()可以直接复制数据。

var imageDataCopy = new Uint8ClampedArray(originalImageData.data); 
imageDataCopy.data.set(originalImageData.data); 

这设置的imageDataCopy含量为等于originalImageData

+0

谢谢!我在试这个代码 – minodisk

+0

什么是原始对象和什么是克隆? doens似乎没有为我工作 – LobsterMan

+1

这是一个糟糕和不明确的代码示例 - 另外,我怀疑它已过时,并且不适用于当代浏览器。 –

0

构造函数ImageData接受图像数据数组。

const imageDataCopy = new ImageData(
    new Uint8ClampedArray(imageData.data), 
    imageData.width, 
    imageData.height 
)