OffscreenCanvas: transferToImageBitmap() 方法
注意:此功能在 Web Workers 中可用。
OffscreenCanvas.transferToImageBitmap() 方法会创建一个 ImageBitmap 对象,该对象是 OffscreenCanvas 最近渲染的图像。OffscreenCanvas 会为后续渲染分配一个新图像。
语法
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 作为参数。
异常
InvalidStateErrorDOMException-
如果以下情况发生,将抛出异常:
- canvas 已转移到另一个上下文范围(例如 worker)
- 尚未通过调用
OffscreenCanvas.getContext()设置 canvas 上下文模式。
示例
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 |
浏览器兼容性
加载中…