2012-06-14 15 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で値によってコピー画像データ](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); 

これはoriginalImageDataと同一であることがimageDataCopyの内容を設定します。

+0

ありがとう!私はこのコードを試しています – minodisk

+0

元のオブジェクトとは何ですか?クローンは何ですか? doens'tは私のために働くように思われる – LobsterMan

+1

これは悪い、不明瞭なコードの例です - さらに、私はそれが時代遅れであり、現代的なブラウザでは動作しないと思われます。 –

0

ImageDataコンストラクタは、画像データ配列を受け入れます。

const imageDataCopy = new ImageData(
    new Uint8ClampedArray(imageData.data), 
    imageData.width, 
    imageData.height 
) 
関連する問題