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

瀏覽器相容性

另見