2012-06-14 13 views
6

Esto está funcionando, pero creo que este código es extenso. Estoy buscando una mejor idea.Cómo clonar 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

duplicado posible de [Copiar propiedad imageData por valor en JavaScript] (http://stackoverflow.com/questions/5642383/copy-imagedata-by-value-in-javascript) – brichins

Respuesta

8

Con TypedArray.prototype.set() puede copiar directamente los datos.

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

Esto establece el contenido de imageDataCopy ser idéntica a originalImageData.

+0

Gracias! Estoy intentando este código – minodisk

+0

¿Cuál es el objeto original y qué es el clon? Parece que no funciona para mí – LobsterMan

+1

Este es un ejemplo de código incorrecto y poco claro. Además, sospecho que está desactualizado y no funciona con navegadores contemporáneos. –

0

El constructor ImageData acepta la matriz de datos de imagen.

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