2012-06-14 8 views
6

To działa, ale uważam, że ten kod jest długi. Szukam lepszego pomysłu.Jak sklonować 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

Możliwy duplikat [Copy imageData przez wartość w JavaScript] (http://stackoverflow.com/questions/5642383/copy-imagedata-by-value-in-javascript) – brichins

Odpowiedz

8

Dzięki TypedArray.prototype.set() możesz bezpośrednio kopiować dane.

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

To ustawia zawartość imageDataCopy być identyczne originalImageData.

+0

Dzięki! Próbuję tego kodu. – minodisk

+0

Jaki jest oryginalny obiekt i jaki jest klon? Wydaje się, że nie działa dla mnie – LobsterMan

+1

To jest zły i niejasny przykład kodu - dodatkowo podejrzewam, że jest on nieaktualny i nie działa ze współczesnymi przeglądarkami. –

0

Konstruktor ImageData akceptuje tablicę danych obrazu.

const imageDataCopy = new ImageData(
    new Uint8ClampedArray(imageData.data), 
    imageData.width, 
    imageData.height 
) 
Powiązane problemy