使用ImageData对象在drawImage中

3

是否可以使用ImageData数组对象来获取一个Image()对象。我的最终目标是使用drawImage而不是putImageData,因为putImageData太慢了(来自stackoverflow类似的问题和我自己的测试)。我只有一个ImageData数组,想要在画布上面的现有图像上绘制。

1个回答

8
你可以从ImageData创建一个ImageBitmap,并将其传递给drawImage()https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/createImageBitmap 类似这样:
const imgdata = ...;
const ctx = ...;

createImageBitmap(imgdata).then(function(imgBitmap) {
    ctx.drawImage(imgBitmap, ...remaining args);
});

我之前曾经使用这种方法对一些 ImageData 进行等比例缩放,因为putImageData没有缩放参数。遗憾的是,IE、Edge和Safari似乎不支持 createImageBitmap()
值得一提的是,在我的情况下(调整 ImageData 大小),createImageBitmap()确实具有调整生成的ImageBitmap大小的额外选项。

你可以使用以下之一: function createImageBitmap(image: ImageBitmapSource): Promise<ImageBitmap>;function createImageBitmap(image: ImageBitmapSource, sx: number, sy: number, sw: number, sh: number): Promise<ImageBitmap>; - kinjelom
createImageBitmap() 方法是复制像素数据还是只是创建一个引用? - Jiang YD
我认为通常所有的ImageBitmapSource都是不可变的,所以它可能是在获取一个引用? - wolf1oo
1
但它比putImageData更快吗?@wolf1oo - Pants
这在最新的Safari和旧版Edge中都不受支持,因此您需要使用polyfill来支持这些浏览器。请搜索“safari createImageBitmap polyfill”。 - kozan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接