OffscreenCanvas: transferToImageBitmap() 方法

Baseline 已广泛支持

此功能已成熟,并可在许多设备和浏览器版本上运行。自 2023 年 3 月以来,它已在各种浏览器中可用。

注意:此功能在 Web Workers 中可用。

OffscreenCanvas.transferToImageBitmap() 方法会创建一个 ImageBitmap 对象,该对象是 OffscreenCanvas 最近渲染的图像。OffscreenCanvas 会为后续渲染分配一个新图像。

语法

js
transferToImageBitmap()

参数

无。

返回值

新分配的 ImageBitmap

ImageBitmap 引用了一个潜在的图形资源,为了确保您的 Web 应用程序保持健壮,在任何时候都要避免分配过多的此类资源。因此,务必确保 ImageBitmap 被“消耗”或“关闭”。

OffscreenCanvas 示例中所述,将此 ImageBitmap 传递给 ImageBitmapRenderingContext.transferFromImageBitmap() 会“消耗”ImageBitmap 对象;它将不再引用底层图形资源,也不能传递给任何其他 Web API。

如果您的目标是将 ImageBitmap 传递给不消耗它的其他 Web API(例如 CanvasRenderingContext2D.drawImage()),那么在使用完毕后,您应该通过调用 ImageBitmap.close() 来“关闭”它。不要仅仅删除对 ImageBitmap 的 JavaScript 引用;这样做会将它的图形资源保留,直到下次垃圾回收器运行时才释放。

如果您调用了 transferToImageBitmap() 并且不打算将其传递给 ImageBitmapRenderingContext.transferFromImageBitmap(),请考虑是否真的需要调用 transferToImageBitmap()。许多接受 ImageBitmap 的 Web API 也接受 OffscreenCanvas 作为参数。

异常

InvalidStateError DOMException

如果以下情况发生,将抛出异常:

  • canvas 已转移到另一个上下文范围(例如 worker)
  • 尚未通过调用 OffscreenCanvas.getContext() 设置 canvas 上下文模式。

示例

js
const offscreen = new OffscreenCanvas(256, 256);
const gl = offscreen.getContext("webgl");

// Perform some drawing using the gl context

offscreen.transferToImageBitmap();
// ImageBitmap { width: 256, height: 256 }

// Either:
// Pass this `ImageBitmap` to `ImageBitmapRenderingContext.transferFromImageBitmap`
// or:
// Use the `ImageBitmap` with other web APIs, and call `ImageBitmap.close()`!

规范

规范
HTML
# dom-offscreencanvas-transfertoimagebitmap-dev

浏览器兼容性

另见