如何克隆ImageData?

min*_*isk 8 javascript

这是有效的,但我觉得这段代码很冗长.我正在寻找更好的主意.

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);
};
Run Code Online (Sandbox Code Playgroud)

小智 10

有了TypedArray.prototype.set()你可以直接复制数据.

var imageDataCopy = new Uint8ClampedArray(originalImageData.data);
imageDataCopy.data.set(originalImageData.data);
Run Code Online (Sandbox Code Playgroud)

这将内容设置imageDataCopy为相同originalImageData.


mar*_*wn4 6

所述的ImageData构造函数接收的图像数据阵列.

const imageDataCopy = new ImageData(
  new Uint8ClampedArray(imageData.data),
  imageData.width,
  imageData.height
)
Run Code Online (Sandbox Code Playgroud)

  • 对于像我一样想知道的人来说,不,“ImageData”构造函数不会克隆“array”参数,并将其用作数据,因此“new Uint8ClampedArray”是必要的。[来源。](https://html.spec.whatwg.org/multipage/canvas.html#dom-imagedata) (2认同)