文档管理中心

OffscreenCanvasRenderingContext2D

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

使用OffscreenCanvasRenderingContext2D在Canvas上进行离屏绘制,绘制对象可以是形状、文本、图片等。离屏绘制是指将需要绘制的内容先绘制在缓冲区,然后将其转换成图片,一次性绘制到Canvas上。离屏绘制使用CPU进行绘制,绘制速度较慢,对绘制速度有要求的场景应避免使用离屏绘制。

说明

constructor

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

constructor(width: number, height: number, settings?: RenderingContextSettings)

构造离屏Canvas画布对象,支持配置画布宽高和OffscreenCanvasRenderingContext2D对象的参数。

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

展开
参数名 类型 必填 说明
width number

离屏画布的宽度,默认单位:vp

异常值NaN和Infinity按无效值处理。

height number

离屏画布的高度,默认单位:vp

异常值NaN和Infinity按无效值处理。

settings RenderingContextSettings

用来配置OffscreenCanvasRenderingContext2D对象的参数,当需要开启抗锯齿等高级配置时传入此参数,见RenderingContextSettings接口描述。

异常值undefined按RenderingContextSettings的默认值处理。

默认值:null

constructor12+

Phone12+PC/2in113+Tablet12+TV19+Wearable18+

constructor(width: number, height: number, settings?: RenderingContextSettings, unit?: LengthMetricsUnit)

构造离屏Canvas画布对象,支持配置画布宽高、OffscreenCanvasRenderingContext2D对象的参数和单位模式。

卡片能力: 从API version 12开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 12开始,该接口支持在元服务中使用。

模型约束: 此接口仅可在Stage模型下使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

展开
参数名 类型 必填 说明
width number

离屏画布的宽度,默认单位:vp

异常值NaN和Infinity按无效值处理。

height number

离屏画布的高度,默认单位:vp

异常值NaN和Infinity按无效值处理。

settings RenderingContextSettings

用来配置OffscreenCanvasRenderingContext2D对象的参数,当需要开启抗锯齿等高级配置时传入此参数,见RenderingContextSettings接口描述。

异常值undefined按RenderingContextSettings的默认值处理。

默认值:null

unit LengthMetricsUnit

用来配置OffscreenCanvasRenderingContext2D对象的单位模式,DEFAULT(默认vp单位,适合大多数场景)、PX(px像素单位,适合需要精确像素控制的场景)。配置后无法动态更改,配置方法同CanvasRenderingContext2D

异常值undefined、NaN和Infinity按默认值处理。

默认值:DEFAULT

toDataURL

toDataURL(type?: string, quality?: any): string

生成一个包含图片展示的Data URL,该接口存在内存拷贝行为,高耗时,应避免频繁使用。

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

展开
参数名 类型 必填 说明
type string

用于指定图像格式。

可选参数为:"image/png","image/jpeg","image/webp"。

异常值undefined或null按默认值处理。

默认值:image/png

quality any

在指定图片格式为image/jpeg或image/webp的情况下,可以从0到1的区间内选择图片的质量,取值范围[0, 1]。如果超出取值范围,将会使用默认值0.92。

异常值undefined、null、NaN和Infinity按默认值处理。

默认值:0.92

返回值:

展开
类型 说明
string 图像的URL地址。

示例:

收起
自动换行
深色代码主题
复制
  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct ToDataURL {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true);
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
  7. private offCanvas: OffscreenCanvas = new OffscreenCanvas(100, 100);
  8. @State dataURL: string = "";
  9. build() {
  10. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  11. Canvas(this.context)
  12. .width(100)
  13. .height(100)
  14. .onReady(() => {
  15. let offContext = this.offCanvas.getContext("2d", this.settings)
  16. offContext.fillRect(0, 0, 100, 100)
  17. this.dataURL = offContext.toDataURL()
  18. })
  19. Text(this.dataURL)
  20. }
  21. .width('100%')
  22. .height('100%')
  23. .backgroundColor('#ffff00')
  24. }
  25. }

transferToImageBitmap

transferToImageBitmap(): ImageBitmap

在离屏画布最近渲染的图像上创建一个ImageBitmap对象。

卡片能力: 从API version 9开始,该接口支持在ArkTS卡片中使用。

元服务API: 从API version 11开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

返回值:

展开
类型 说明
ImageBitmap 存储离屏画布上渲染的像素数据。

示例:

收起
自动换行
深色代码主题
复制
  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct PutImageData {
  5. private settings: RenderingContextSettings = new RenderingContextSettings(true);
  6. private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
  7. private offCanvas: OffscreenCanvas = new OffscreenCanvas(600, 600);
  8. build() {
  9. Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
  10. Canvas(this.context)
  11. .width('100%')
  12. .height('100%')
  13. .backgroundColor('rgb(213,213,213)')
  14. .onReady(() => {
  15. let offContext = this.offCanvas.getContext("2d", this.settings)
  16. let imageData = offContext.createImageData(100, 100)
  17. for (let i = 0; i < imageData.data.length; i += 4) {
  18. imageData.data[i + 0] = 112
  19. imageData.data[i + 1] = 112
  20. imageData.data[i + 2] = 112
  21. imageData.data[i + 3] = 255
  22. }
  23. offContext.putImageData(imageData, 10, 10)
  24. let image = this.offCanvas.transferToImageBitmap()
  25. this.context.transferFromImageBitmap(image)
  26. })
  27. }
  28. .width('100%')
  29. .height('100%')
  30. }
  31. }

在 API参考 中进行搜索
请输入您想要搜索的关键词