1e41f4b71Sopenharmony_ci#  Canvas
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci提供画布组件,用于自定义绘制图形。
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ci> **说明:** 
6e41f4b71Sopenharmony_ci>
7e41f4b71Sopenharmony_ci>  该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ci## 子组件
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci不支持。
12e41f4b71Sopenharmony_ci
13e41f4b71Sopenharmony_ci## 接口
14e41f4b71Sopenharmony_ci
15e41f4b71Sopenharmony_ci### Canvas
16e41f4b71Sopenharmony_ci
17e41f4b71Sopenharmony_ciCanvas(context?: CanvasRenderingContext2D | DrawingRenderingContext)
18e41f4b71Sopenharmony_ci
19e41f4b71Sopenharmony_ci**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
20e41f4b71Sopenharmony_ci
21e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
22e41f4b71Sopenharmony_ci
23e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
24e41f4b71Sopenharmony_ci
25e41f4b71Sopenharmony_ci**参数:**
26e41f4b71Sopenharmony_ci
27e41f4b71Sopenharmony_ci| 参数名  | 类型    | 必填 | 说明   |
28e41f4b71Sopenharmony_ci| ------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
29e41f4b71Sopenharmony_ci| context | [CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md) \| [DrawingRenderingContext<sup>12+</sup>](ts-drawingrenderingcontext.md) | 否   | CanvasRenderingContext2D: 不支持多个Canvas共用一个CanvasRenderingContext2D对象,具体描述见[CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md)对象。DrawingRenderingContext: 不支持多个Canvas共用一个DrawingRenderingContext对象,具体描述见[DrawingRenderingContext](ts-drawingrenderingcontext.md)对象。 |
30e41f4b71Sopenharmony_ci
31e41f4b71Sopenharmony_ci### Canvas<sup>12+</sup>
32e41f4b71Sopenharmony_ci
33e41f4b71Sopenharmony_ciCanvas(context: CanvasRenderingContext2D | DrawingRenderingContext, imageAIOptions: ImageAIOptions)
34e41f4b71Sopenharmony_ci
35e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
36e41f4b71Sopenharmony_ci
37e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
38e41f4b71Sopenharmony_ci
39e41f4b71Sopenharmony_ci**参数:**
40e41f4b71Sopenharmony_ci
41e41f4b71Sopenharmony_ci| 参数名  | 类型  | 必填 | 说明 |
42e41f4b71Sopenharmony_ci| ------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
43e41f4b71Sopenharmony_ci| context | [CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md) \| [DrawingRenderingContext<sup>12+</sup>](ts-drawingrenderingcontext.md) | 是   | CanvasRenderingContext2D: 不支持多个Canvas共用一个CanvasRenderingContext2D对象,具体描述见[CanvasRenderingContext2D](ts-canvasrenderingcontext2d.md)对象。DrawingRenderingContext: 不支持多个Canvas共用一个DrawingRenderingContext对象,具体描述见[DrawingRenderingContext](ts-drawingrenderingcontext.md)对象。 |
44e41f4b71Sopenharmony_ci| imageAIOptions  | [ImageAIOptions](ts-image-common.md#imageaioptions) | 是   | 给组件设置一个AI分析选项,通过此项可配置分析类型或绑定一个分析控制器。 |
45e41f4b71Sopenharmony_ci
46e41f4b71Sopenharmony_ci## 属性
47e41f4b71Sopenharmony_ci
48e41f4b71Sopenharmony_ci除支持[通用属性](ts-universal-attributes-size.md)外,还支持以下属性:
49e41f4b71Sopenharmony_ci
50e41f4b71Sopenharmony_ci### enableAnalyzer<sup>12+</sup>
51e41f4b71Sopenharmony_ci
52e41f4b71Sopenharmony_ci设置组件支持AI分析,当前支持主体识别、文字识别和对象查找等功能。
53e41f4b71Sopenharmony_ci需要搭配[context](ts-canvasrenderingcontext2d.md)中的[StartImageAnalyzer](ts-canvasrenderingcontext2d.md#startimageanalyzer12)和[StopImageAnalyzer](ts-canvasrenderingcontext2d.md#stopimageanalyzer12)一起使用。
54e41f4b71Sopenharmony_ci不能和[overlay](ts-universal-attributes-overlay.md#overlay)属性同时使用,两者同时设置时overlay中CustomBuilder属性将失效。该特性依赖设备能力。
55e41f4b71Sopenharmony_ci
56e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
57e41f4b71Sopenharmony_ci
58e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
59e41f4b71Sopenharmony_ci
60e41f4b71Sopenharmony_ci**参数:** 
61e41f4b71Sopenharmony_ci
62e41f4b71Sopenharmony_ci| 参数名 | 类型    | 必填 | 说明 |
63e41f4b71Sopenharmony_ci| ------ | ------- | ---- | ------------------------------------------------------------ |
64e41f4b71Sopenharmony_ci| enable  | boolean | 是   | 组件支持AI分析,设置为true时,组件可进行AI分析。<br/>默认值:false |
65e41f4b71Sopenharmony_ci
66e41f4b71Sopenharmony_ci## 事件
67e41f4b71Sopenharmony_ci
68e41f4b71Sopenharmony_ci**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
69e41f4b71Sopenharmony_ci
70e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
71e41f4b71Sopenharmony_ci
72e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
73e41f4b71Sopenharmony_ci
74e41f4b71Sopenharmony_ci除支持[通用事件](ts-universal-events-click.md)外,还支持如下事件:
75e41f4b71Sopenharmony_ci
76e41f4b71Sopenharmony_ci| 名称                         | 描述                                       |
77e41f4b71Sopenharmony_ci| -------------------------- | ---------------------------------------- |
78e41f4b71Sopenharmony_ci| onReady(event: () => void) | Canvas组件初始化完成时或者Canvas组件发生大小变化时的事件回调,当该事件被触发时画布被清空,该事件之后Canvas组件宽高确定且可获取,可使用Canvas相关API进行绘制。当Canvas组件仅发生位置变化时,只触发[onAreaChange](ts-universal-component-area-change-event.md#onAreaChange)事件、不触发onReady事件。<br/>[onAreaChange](ts-universal-component-area-change-event.md#onAreaChange)事件在onReady事件后触发。 |
79e41f4b71Sopenharmony_ci
80e41f4b71Sopenharmony_ci**示例:**
81e41f4b71Sopenharmony_ci
82e41f4b71Sopenharmony_ci该示例实现了如何在Canvas组件使用CanvasRenderingContext2D中的方法进行绘制。
83e41f4b71Sopenharmony_ci
84e41f4b71Sopenharmony_ci```ts
85e41f4b71Sopenharmony_ci// xxx.ets
86e41f4b71Sopenharmony_ci@Entry
87e41f4b71Sopenharmony_ci@Component
88e41f4b71Sopenharmony_cistruct CanvasExample {
89e41f4b71Sopenharmony_ci  private settings: RenderingContextSettings = new RenderingContextSettings(true)
90e41f4b71Sopenharmony_ci  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
91e41f4b71Sopenharmony_ci
92e41f4b71Sopenharmony_ci  build() {
93e41f4b71Sopenharmony_ci    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
94e41f4b71Sopenharmony_ci      Canvas(this.context)
95e41f4b71Sopenharmony_ci        .width('100%')
96e41f4b71Sopenharmony_ci        .height('100%')
97e41f4b71Sopenharmony_ci        .backgroundColor('#ffff00')
98e41f4b71Sopenharmony_ci        .onReady(() => {
99e41f4b71Sopenharmony_ci          this.context.fillRect(0, 30, 100, 100)
100e41f4b71Sopenharmony_ci        })
101e41f4b71Sopenharmony_ci    }
102e41f4b71Sopenharmony_ci    .width('100%')
103e41f4b71Sopenharmony_ci    .height('100%')
104e41f4b71Sopenharmony_ci  }
105e41f4b71Sopenharmony_ci}
106e41f4b71Sopenharmony_ci```
107e41f4b71Sopenharmony_ci  ![zh-cn_image_0000001194032666](figures/zh-cn_image_0000001194032666.png)
108e41f4b71Sopenharmony_ci
109e41f4b71Sopenharmony_ci
110e41f4b71Sopenharmony_ci该示例实现了如何在Canvas组件使用DrawingRenderingContext中的方法进行绘制。
111e41f4b71Sopenharmony_ci
112e41f4b71Sopenharmony_ci```ts
113e41f4b71Sopenharmony_ci// xxx.ets
114e41f4b71Sopenharmony_ci@Entry
115e41f4b71Sopenharmony_ci@Component
116e41f4b71Sopenharmony_cistruct CanvasExample {
117e41f4b71Sopenharmony_ci  private context: DrawingRenderingContext = new DrawingRenderingContext()
118e41f4b71Sopenharmony_ci
119e41f4b71Sopenharmony_ci  build() {
120e41f4b71Sopenharmony_ci    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
121e41f4b71Sopenharmony_ci      Canvas(this.context)
122e41f4b71Sopenharmony_ci        .width('100%')
123e41f4b71Sopenharmony_ci        .height('100%')
124e41f4b71Sopenharmony_ci        .backgroundColor('#ffff00')
125e41f4b71Sopenharmony_ci        .onReady(() => {
126e41f4b71Sopenharmony_ci          this.context.canvas.drawCircle(200, 200, 100)
127e41f4b71Sopenharmony_ci          this.context.invalidate()
128e41f4b71Sopenharmony_ci        })
129e41f4b71Sopenharmony_ci    }
130e41f4b71Sopenharmony_ci    .width('100%')
131e41f4b71Sopenharmony_ci    .height('100%')
132e41f4b71Sopenharmony_ci  }
133e41f4b71Sopenharmony_ci}
134e41f4b71Sopenharmony_ci```
135e41f4b71Sopenharmony_ci  ![zh-cn_image_0000001194032666](figures/canvas_drawingRenderingContext.png)