2012-06-14 141 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 
)