• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# CanvasRenderingContext2D
2
3使用RenderingContext在Canvas组件上进行绘制,绘制对象可以是矩形、文本、图片等。
4
5> **说明:**
6>
7> 从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9
10
11## 接口
12
13CanvasRenderingContext2D(settings?: RenderingContextSettings)
14
15从API version 9开始,该接口支持在ArkTS卡片中使用。
16
17**参数:**
18
19| 参数名      | 参数类型                                     | 必填   | 参数描述                                     |
20| -------- | ---------------------------------------- | ---- | ---------------------------------------- |
21| settings | [RenderingContextSettings](#renderingcontextsettings) | 否    | 用来配置CanvasRenderingContext2D对象的参数,见[RenderingContextSettings](#renderingcontextsettings)。 |
22
23
24### RenderingContextSettings
25
26RenderingContextSettings(antialias?: boolean)
27
28用来配置CanvasRenderingContext2D对象的参数,包括是否开启抗锯齿。
29
30从API version 9开始,该接口支持在ArkTS卡片中使用。
31
32**参数:**
33
34| 参数名       | 参数类型    | 必填   | 参数描述                          |
35| --------- | ------- | ---- | ----------------------------- |
36| antialias | boolean | 否    | 表明canvas是否开启抗锯齿。<br>默认值:false |
37
38
39## 属性
40
41| 名称                                       | 类型                                       | 描述                                       |
42| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
43| [fillStyle](#fillstyle)                  | string&nbsp;\|number<sup>10+</sup>&nbsp;\|[CanvasGradient](ts-components-canvas-canvasgradient.md)&nbsp;\|&nbsp;[CanvasPattern](ts-components-canvas-canvaspattern.md#canvaspattern) | 指定绘制的填充色。<br/>-&nbsp;类型为string时,表示设置填充区域的颜色。<br/>默认值:'black'<br/>- 类型为number时,表示设置填充区域的颜色。<br/>默认值:'#000000'<br/>-&nbsp;类型为CanvasGradient时,表示渐变对象,使用[createLinearGradient](#createlineargradient)方法创建。<br/>-&nbsp;类型为CanvasPattern时,使用[createPattern](#createpattern)方法创建。<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
44| [lineWidth](#linewidth)                  | number                                   | 设置绘制线条的宽度。<br/>默认值:1(px)<br/>单位:vp <br/> linewidth取值不支持0和负数,0和负数按异常值处理,异常值按默认值处理。               |
45| [strokeStyle](#strokestyle)              | string&nbsp;\|number<sup>10+</sup>&nbsp;\|[CanvasGradient](ts-components-canvas-canvasgradient.md)&nbsp;\|&nbsp;[CanvasPattern](ts-components-canvas-canvaspattern.md#canvaspattern) | 设置线条的颜色。<br/>-&nbsp;类型为string时,表示设置线条使用的颜色。<br/>默认值:'black'<br/>- 类型为number时,表示设置线条使用的颜色。<br/>默认值:'#000000'<br/>-&nbsp;类型为CanvasGradient时,表示渐变对象,使用[createLinearGradient](#createlineargradient)方法创建。<br/>-&nbsp;类型为CanvasPattern时,使用[createPattern](#createpattern)方法创建。<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
46| [lineCap](#linecap)                      | [CanvasLineCap](#canvaslinecap)                            | 指定线端点的样式,可选值为:<br/>-&nbsp;'butt':线端点以方形结束。<br/>-&nbsp;'round':线端点以圆形结束。<br/>-&nbsp;'square':线端点以方形结束,该样式下会增加一个长度和线段厚度相同,宽度是线段厚度一半的矩形。<br/>默认值:'butt'<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
47| [lineJoin](#linejoin)                    | [CanvasLineJoin](#canvaslinejoin)     | 指定线段间相交的交点样式,可选值为:<br/>-&nbsp;'round':在线段相连处绘制一个扇形,扇形的圆角半径是线段的宽度。<br/>-&nbsp;'bevel':在线段相连处使用三角形为底填充,&nbsp;每个部分矩形拐角独立。<br/>-&nbsp;'miter':在相连部分的外边缘处进行延伸,使其相交于一点,形成一个菱形区域,该属性可以通过设置miterLimit属性展现效果。<br/>默认值:'miter'<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
48| [miterLimit](#miterlimit)                | number                                   | 设置斜接面限制值,该值指定了线条相交处内角和外角的距离。  <br/>默认值:10<br/>单位:px<br/>miterLimit取值不支持0和负数,0和负数按异常值处理,异常值按默认值处理。<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
49| [font](#font)                            | string                                   | 设置文本绘制中的字体样式。<br/>语法:ctx.font='font-size&nbsp;font-family'<br/>-&nbsp;font-size(可选),指定字号和行高,单位支持px和vp。<br/>-&nbsp;font-family(可选),指定字体系列。<br/>语法:ctx.font='font-style&nbsp;font-weight&nbsp;font-size&nbsp;font-family'<br/>-&nbsp;font-style(可选),用于指定字体样式,支持如下几种样式:'normal','italic'。<br/>-&nbsp;font-weight(可选),用于指定字体的粗细,支持如下几种类型:'normal',&nbsp;'bold',&nbsp;'bolder',&nbsp;'lighter',&nbsp;100,&nbsp;200,&nbsp;300,&nbsp;400,&nbsp;500,&nbsp;600,&nbsp;700,&nbsp;800,&nbsp;900。<br/>-&nbsp;font-size(可选),指定字号和行高,单位支持px、vp。使用时需要添加单位。<br/>-&nbsp;font-family(可选),指定字体系列,支持如下几种类型:'sans-serif',&nbsp;'serif',&nbsp;'monospace'。<br/>默认值:'normal normal 14px sans-serif'<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
50| [textAlign](#textalign)                  | [CanvasTextAlign](#canvastextalign)          | 设置文本绘制中的文本对齐方式,可选值为:<br/>-&nbsp;'left':文本左对齐。<br/>-&nbsp;'right':文本右对齐。<br/>-&nbsp;'center':文本居中对齐。<br/>-&nbsp;'start':文本对齐界线开始的地方。<br/>-&nbsp;'end':文本对齐界线结束的地方。<br/>ltr布局模式下'start'和'left'一致,rtl布局模式下'start'和'right'一致·。<br/>默认值:'left'<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
51| [textBaseline](#textbaseline)            | [CanvasTextBaseline](#canvastextbaseline)           | 设置文本绘制中的水平对齐方式,可选值为:<br/>-&nbsp;'alphabetic':文本基线是标准的字母基线。<br/>-&nbsp;'top':文本基线在文本块的顶部。<br/>-&nbsp;'hanging':文本基线是悬挂基线。<br/>-&nbsp;'middle':文本基线在文本块的中间。<br/>-&nbsp;'ideographic':文字基线是表意字基线;如果字符本身超出了alphabetic基线,那么ideograhpic基线位置在字符本身的底部。<br/>-&nbsp;'bottom':文本基线在文本块的底部。&nbsp;与ideographic基线的区别在于ideographic基线不需要考虑下行字母。<br/>默认值:'alphabetic'<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
52| [globalAlpha](#globalalpha)              | number                                   | 设置透明度,0.0为完全透明,1.0为完全不透明。<br/>默认值:1.0<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
53| [lineDashOffset](#linedashoffset)        | number                                   | 设置画布的虚线偏移量,精度为float。    <br/>默认值:0.0<br/>单位:px<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
54| [globalCompositeOperation](#globalcompositeoperation) | string                                   | 设置合成操作的方式。类型字段可选值有'source-over','source-atop','source-in','source-out','destination-over','destination-atop','destination-in','destination-out','lighter','copy','xor'。<br/>默认值:'source-over'<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
55| [shadowBlur](#shadowblur)                | number                                   | 设置绘制阴影时的模糊级别,值越大越模糊,精度为float。   <br/>默认值:0.0<br/>shadowBlur取值不支持负数,负数按异常值处理,异常值按默认值处理。<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
56| [shadowColor](#shadowcolor)              | string                                   | 设置绘制阴影时的阴影颜色。<br/>默认值:透明黑色。<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
57| [shadowOffsetX](#shadowoffsetx)          | number                                   | 设置绘制阴影时和原有对象的水平偏移值。<br/>默认值:0<br/>单位:vp<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
58| [shadowOffsetY](#shadowoffsety)          | number                                   | 设置绘制阴影时和原有对象的垂直偏移值。<br/>默认值:0<br/>单位:vp<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
59| [imageSmoothingEnabled](#imagesmoothingenabled) | boolean                                  | 用于设置绘制图片时是否进行图像平滑度调整,true为启用,false为不启用。 <br/>默认值:true<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
60| [height](#height)                        | number                                   | 组件高度。 <br/>单位:vp<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
61| [width](#width)                          | number                                   | 组件宽度。 <br/>单位:vp<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
62| [imageSmoothingQuality](#imagesmoothingquality) | [ImageSmoothingQuality](#imagesmoothingquality-1) | imageSmoothingEnabled为true时,用于设置图像平滑度。<br/>默认值:ImageSmoothingQuality.low<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
63| [direction](#direction)                  | [CanvasDirection](#canvasdirection) | 用于设置绘制文字时使用的文字方向。<br/>默认值:CanvasDirection.inherit<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
64| [filter](#filter)                        | string                                   | 用于设置图像的滤镜。支持的滤镜效果如下:<br/>- 'none': 无滤镜效果<br/>- 'blur':给图像设置高斯模糊<br/>- 'brightness':给图片应用一种线性乘法,使其看起来更亮或更暗<br/>- 'contrast':调整图像的对比度<br/>- 'grayscale':将图像转换为灰度图像<br/>- 'hue-rotate':给图像应用色相旋转<br/>- 'invert':反转输入图像<br/>- 'opacity':转化图像的透明程度<br/>- 'saturate':转换图像饱和度<br/>- 'sepia':将图像转换为深褐色<br/>默认值:'none'<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
65
66> **说明:**
67>
68> fillStyle、shadowColor与 strokeStyle 中string类型格式为 'rgb(255, 255, 255)','rgba(255, 255, 255, 1.0)','\#FFFFFF'。
69
70
71### fillStyle
72
73```ts
74// xxx.ets
75@Entry
76@Component
77struct FillStyleExample {
78  private settings: RenderingContextSettings = new RenderingContextSettings(true)
79  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
80
81  build() {
82    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
83      Canvas(this.context)
84        .width('100%')
85        .height('100%')
86        .backgroundColor('#ffff00')
87        .onReady(() =>{
88          this.context.fillStyle = '#0000ff'
89          this.context.fillRect(20, 20, 150, 100)
90        })
91    }
92    .width('100%')
93    .height('100%')
94  }
95}
96```
97
98![zh-cn_image_0000001238712411](figures/zh-cn_image_0000001238712411.png)
99
100
101### lineWidth
102
103```ts
104// xxx.ets
105@Entry
106@Component
107struct LineWidthExample {
108  private settings: RenderingContextSettings = new RenderingContextSettings(true)
109  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
110
111  build() {
112    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
113      Canvas(this.context)
114        .width('100%')
115        .height('100%')
116        .backgroundColor('#ffff00')
117        .onReady(() =>{
118        this.context.lineWidth = 5
119        this.context.strokeRect(25, 25, 85, 105)
120      })
121    }
122    .width('100%')
123    .height('100%')
124  }
125}
126```
127
128![zh-cn_image_0000001194192432](figures/zh-cn_image_0000001194192432.png)
129
130
131### strokeStyle
132
133```ts
134// xxx.ets
135@Entry
136@Component
137struct StrokeStyleExample {
138  private settings: RenderingContextSettings = new RenderingContextSettings(true)
139  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
140
141  build() {
142    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
143      Canvas(this.context)
144        .width('100%')
145        .height('100%')
146        .backgroundColor('#ffff00')
147        .onReady(() =>{
148          this.context.lineWidth = 10
149          this.context.strokeStyle = '#0000ff'
150          this.context.strokeRect(25, 25, 155, 105)
151        })
152    }
153    .width('100%')
154    .height('100%')
155  }
156}
157```
158
159
160![zh-cn_image_0000001194352432](figures/zh-cn_image_0000001194352432.png)
161
162
163### lineCap
164
165```ts
166// xxx.ets
167@Entry
168@Component
169struct LineCapExample {
170  private settings: RenderingContextSettings = new RenderingContextSettings(true)
171  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
172
173  build() {
174    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
175      Canvas(this.context)
176        .width('100%')
177        .height('100%')
178        .backgroundColor('#ffff00')
179        .onReady(() =>{
180          this.context.lineWidth = 8
181          this.context.beginPath()
182          this.context.lineCap = 'round'
183          this.context.moveTo(30, 50)
184          this.context.lineTo(220, 50)
185          this.context.stroke()
186        })
187    }
188    .width('100%')
189    .height('100%')
190  }
191}
192```
193
194![zh-cn_image_0000001238952373](figures/zh-cn_image_0000001238952373.png)
195
196
197### lineJoin
198
199```ts
200// xxx.ets
201@Entry
202@Component
203struct LineJoinExample {
204  private settings: RenderingContextSettings = new RenderingContextSettings(true)
205  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
206
207  build() {
208    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
209      Canvas(this.context)
210        .width('100%')
211        .height('100%')
212        .backgroundColor('#ffff00')
213        .onReady(() =>{
214        this.context.beginPath()
215        this.context.lineWidth = 8
216        this.context.lineJoin = 'miter'
217        this.context.moveTo(30, 30)
218        this.context.lineTo(120, 60)
219        this.context.lineTo(30, 110)
220        this.context.stroke()
221      })
222    }
223    .width('100%')
224    .height('100%')
225  }
226}
227```
228
229![zh-cn_image_0000001194032454](figures/zh-cn_image_0000001194032454.png)
230
231
232### miterLimit
233
234```ts
235// xxx.ets
236@Entry
237@Component
238struct MiterLimit {
239  private settings: RenderingContextSettings = new RenderingContextSettings(true)
240  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
241
242  build() {
243    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
244      Canvas(this.context)
245        .width('100%')
246        .height('100%')
247        .backgroundColor('#ffff00')
248        .onReady(() =>{
249          this.context.lineWidth = 8
250          this.context.lineJoin = 'miter'
251          this.context.miterLimit = 3
252          this.context.moveTo(30, 30)
253          this.context.lineTo(60, 35)
254          this.context.lineTo(30, 37)
255          this.context.stroke()
256      })
257    }
258    .width('100%')
259    .height('100%')
260  }
261}
262```
263
264![zh-cn_image_0000001239032409](figures/zh-cn_image_0000001239032409.png)
265
266
267### font
268
269```ts
270// xxx.ets
271@Entry
272@Component
273struct Fonts {
274  private settings: RenderingContextSettings = new RenderingContextSettings(true)
275  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
276
277  build() {
278    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
279      Canvas(this.context)
280        .width('100%')
281        .height('100%')
282        .backgroundColor('#ffff00')
283        .onReady(() =>{
284          this.context.font = '30px sans-serif'
285          this.context.fillText("Hello px", 20, 60)
286          this.context.font = '30vp sans-serif'
287          this.context.fillText("Hello vp", 20, 100)
288        })
289    }
290    .width('100%')
291    .height('100%')
292  }
293}
294```
295
296![zh-cn_image_0000001193872488](figures/zh-cn_image_0000001193872488.png)
297
298
299### textAlign
300
301```ts
302// xxx.ets
303@Entry
304@Component
305struct CanvasExample {
306  private settings: RenderingContextSettings = new RenderingContextSettings(true)
307  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
308
309  build() {
310    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
311      Canvas(this.context)
312        .width('100%')
313        .height('100%')
314        .backgroundColor('#ffff00')
315        .onReady(() =>{
316        this.context.strokeStyle = '#0000ff'
317        this.context.moveTo(140, 10)
318        this.context.lineTo(140, 160)
319        this.context.stroke()
320        this.context.font = '18px sans-serif'
321        this.context.textAlign = 'start'
322        this.context.fillText('textAlign=start', 140, 60)
323        this.context.textAlign = 'end'
324        this.context.fillText('textAlign=end', 140, 80)
325        this.context.textAlign = 'left'
326        this.context.fillText('textAlign=left', 140, 100)
327        this.context.textAlign = 'center'
328        this.context.fillText('textAlign=center',140, 120)
329        this.context.textAlign = 'right'
330        this.context.fillText('textAlign=right',140, 140)
331      })
332    }
333    .width('100%')
334    .height('100%')
335  }
336}
337```
338
339![zh-cn_image_0000001238832385](figures/zh-cn_image_0000001238832385.png)
340
341
342### textBaseline
343
344```ts
345// xxx.ets
346@Entry
347@Component
348struct TextBaseline {
349  private settings: RenderingContextSettings = new RenderingContextSettings(true)
350  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
351
352  build() {
353    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
354      Canvas(this.context)
355        .width('100%')
356        .height('100%')
357        .backgroundColor('#ffff00')
358        .onReady(() =>{
359          this.context.strokeStyle = '#0000ff'
360          this.context.moveTo(0, 120)
361          this.context.lineTo(400, 120)
362          this.context.stroke()
363          this.context.font = '20px sans-serif'
364          this.context.textBaseline = 'top'
365          this.context.fillText('Top', 10, 120)
366          this.context.textBaseline = 'bottom'
367          this.context.fillText('Bottom', 55, 120)
368          this.context.textBaseline = 'middle'
369          this.context.fillText('Middle', 125, 120)
370          this.context.textBaseline = 'alphabetic'
371          this.context.fillText('Alphabetic', 195, 120)
372          this.context.textBaseline = 'hanging'
373          this.context.fillText('Hanging', 295, 120)
374      })
375    }
376    .width('100%')
377    .height('100%')
378  }
379}
380```
381
382![zh-cn_image_0000001238712413](figures/zh-cn_image_0000001238712413.png)
383
384
385### globalAlpha
386
387```ts
388// xxx.ets
389@Entry
390@Component
391struct GlobalAlpha {
392  private settings: RenderingContextSettings = new RenderingContextSettings(true)
393  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
394
395  build() {
396    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
397      Canvas(this.context)
398        .width('100%')
399        .height('100%')
400        .backgroundColor('#ffff00')
401        .onReady(() =>{
402          this.context.fillStyle = 'rgb(0,0,255)'
403          this.context.fillRect(0, 0, 50, 50)
404          this.context.globalAlpha = 0.4
405          this.context.fillStyle = 'rgb(0,0,255)'
406          this.context.fillRect(50, 50, 50, 50)
407      })
408    }
409    .width('100%')
410    .height('100%')
411  }
412}
413```
414
415![zh-cn_image_0000001194192434](figures/zh-cn_image_0000001194192434.png)
416
417
418### lineDashOffset
419
420```ts
421// xxx.ets
422@Entry
423@Component
424struct LineDashOffset {
425  private settings: RenderingContextSettings = new RenderingContextSettings(true)
426  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
427
428  build() {
429    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
430      Canvas(this.context)
431        .width('100%')
432        .height('100%')
433        .backgroundColor('#ffff00')
434        .onReady(() =>{
435          this.context.arc(100, 75, 50, 0, 6.28)
436          this.context.setLineDash([10,20])
437          this.context.lineDashOffset = 10.0
438          this.context.stroke()
439      })
440    }
441    .width('100%')
442    .height('100%')
443  }
444}
445```
446
447![zh-cn_image_0000001194352434](figures/zh-cn_image_0000001194352434.png)
448
449
450### globalCompositeOperation
451
452| 名称               | 描述                       |
453| ---------------- | ------------------------ |
454| source-over      | 在现有绘制内容上显示新绘制内容,属于默认值。   |
455| source-atop      | 在现有绘制内容顶部显示新绘制内容。        |
456| source-in        | 在现有绘制内容中显示新绘制内容。         |
457| source-out       | 在现有绘制内容之外显示新绘制内容。        |
458| destination-over | 在新绘制内容上方显示现有绘制内容。        |
459| destination-atop | 在新绘制内容顶部显示现有绘制内容。        |
460| destination-in   | 在新绘制内容中显示现有绘制内容。         |
461| destination-out  | 在新绘制内容外显示现有绘制内容。         |
462| lighter          | 显示新绘制内容和现有绘制内容。          |
463| copy             | 显示新绘制内容而忽略现有绘制内容。        |
464| xor              | 使用异或操作对新绘制内容与现有绘制内容进行融合。 |
465
466```ts
467// xxx.ets
468@Entry
469@Component
470struct GlobalCompositeOperation {
471  private settings: RenderingContextSettings = new RenderingContextSettings(true)
472  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
473
474  build() {
475    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
476      Canvas(this.context)
477        .width('100%')
478        .height('100%')
479        .backgroundColor('#ffff00')
480        .onReady(() =>{
481          this.context.fillStyle = 'rgb(255,0,0)'
482          this.context.fillRect(20, 20, 50, 50)
483          this.context.globalCompositeOperation = 'source-over'
484          this.context.fillStyle = 'rgb(0,0,255)'
485          this.context.fillRect(50, 50, 50, 50)
486          this.context.fillStyle = 'rgb(255,0,0)'
487          this.context.fillRect(120, 20, 50, 50)
488          this.context.globalCompositeOperation = 'destination-over'
489          this.context.fillStyle = 'rgb(0,0,255)'
490          this.context.fillRect(150, 50, 50, 50)
491      })
492    }
493    .width('100%')
494    .height('100%')
495  }
496}
497```
498
499![zh-cn_image_0000001238952375](figures/zh-cn_image_0000001238952375.png)
500
501
502### shadowBlur
503
504```ts
505// xxx.ets
506@Entry
507@Component
508struct ShadowBlur {
509  private settings: RenderingContextSettings = new RenderingContextSettings(true)
510  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
511
512  build() {
513    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
514      Canvas(this.context)
515        .width('100%')
516        .height('100%')
517        .backgroundColor('#ffff00')
518        .onReady(() =>{
519          this.context.shadowBlur = 30
520          this.context.shadowColor = 'rgb(0,0,0)'
521          this.context.fillStyle = 'rgb(255,0,0)'
522          this.context.fillRect(20, 20, 100, 80)
523      })
524    }
525    .width('100%')
526    .height('100%')
527  }
528}
529```
530
531![zh-cn_image_0000001194032456](figures/zh-cn_image_0000001194032456.png)
532
533
534### shadowColor
535
536```ts
537// xxx.ets
538@Entry
539@Component
540struct ShadowColor {
541  private settings: RenderingContextSettings = new RenderingContextSettings(true)
542  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
543
544  build() {
545    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
546      Canvas(this.context)
547        .width('100%')
548        .height('100%')
549        .backgroundColor('#ffff00')
550        .onReady(() =>{
551          this.context.shadowBlur = 30
552          this.context.shadowColor = 'rgb(0,0,255)'
553          this.context.fillStyle = 'rgb(255,0,0)'
554          this.context.fillRect(30, 30, 100, 100)
555      })
556    }
557    .width('100%')
558    .height('100%')
559  }
560}
561```
562
563![zh-cn_image_0000001239032411](figures/zh-cn_image_0000001239032411.png)
564
565
566### shadowOffsetX
567
568```ts
569// xxx.ets
570@Entry
571@Component
572struct ShadowOffsetX {
573  private settings: RenderingContextSettings = new RenderingContextSettings(true)
574  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
575
576  build() {
577    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
578      Canvas(this.context)
579        .width('100%')
580        .height('100%')
581        .backgroundColor('#ffff00')
582        .onReady(() =>{
583          this.context.shadowBlur = 10
584          this.context.shadowOffsetX = 20
585          this.context.shadowColor = 'rgb(0,0,0)'
586          this.context.fillStyle = 'rgb(255,0,0)'
587          this.context.fillRect(20, 20, 100, 80)
588      })
589    }
590    .width('100%')
591    .height('100%')
592  }
593}
594```
595
596![zh-cn_image_0000001193872490](figures/zh-cn_image_0000001193872490.png)
597
598
599### shadowOffsetY
600
601```ts
602// xxx.ets
603@Entry
604@Component
605struct ShadowOffsetY {
606  private settings: RenderingContextSettings = new RenderingContextSettings(true)
607  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
608  build() {
609    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
610      Canvas(this.context)
611        .width('100%')
612        .height('100%')
613        .backgroundColor('#ffff00')
614        .onReady(() =>{
615          this.context.shadowBlur = 10
616          this.context.shadowOffsetY = 20
617          this.context.shadowColor = 'rgb(0,0,0)'
618          this.context.fillStyle = 'rgb(255,0,0)'
619          this.context.fillRect(30, 30, 100, 100)
620      })
621    }
622    .width('100%')
623    .height('100%')
624  }
625}
626```
627
628![zh-cn_image_0000001238832387](figures/zh-cn_image_0000001238832387.png)
629
630
631### imageSmoothingEnabled
632
633```ts
634// xxx.ets
635@Entry
636@Component
637struct ImageSmoothingEnabled {
638  private settings: RenderingContextSettings = new RenderingContextSettings(true)
639  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
640  private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg")
641
642  build() {
643    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
644      Canvas(this.context)
645        .width('100%')
646        .height('100%')
647        .backgroundColor('#ffff00')
648        .onReady(() =>{
649          this.context.imageSmoothingEnabled = false
650          this.context.drawImage( this.img,0,0,400,200)
651      })
652    }
653    .width('100%')
654    .height('100%')
655  }
656}
657```
658
659![zh-cn_image_0000001238712415](figures/zh-cn_image_0000001238712415.png)
660
661
662### height
663
664```ts
665// xxx.ets
666@Entry
667@Component
668struct HeightExample {
669  private settings: RenderingContextSettings = new RenderingContextSettings(true)
670  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
671
672  build() {
673    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
674      Canvas(this.context)
675        .width(300)
676        .height(300)
677        .backgroundColor('#ffff00')
678        .onReady(() => {
679          let h = this.context.height
680          this.context.fillRect(0, 0, 300, h/2)
681        })
682    }
683    .width('100%')
684    .height('100%')
685  }
686}
687```
688
689![zh-cn_image_canvas_height](figures/zh-cn_image_canvas_height.png)
690
691
692### width
693
694```ts
695// xxx.ets
696@Entry
697@Component
698struct WidthExample {
699  private settings: RenderingContextSettings = new RenderingContextSettings(true)
700  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
701
702  build() {
703    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
704      Canvas(this.context)
705        .width(300)
706        .height(300)
707        .backgroundColor('#ffff00')
708        .onReady(() => {
709          let w = this.context.width
710          this.context.fillRect(0, 0, w/2, 300)
711        })
712    }
713    .width('100%')
714    .height('100%')
715  }
716}
717```
718
719![zh-cn_image_canvas_width](figures/zh-cn_image_canvas_width.png)
720
721
722### imageSmoothingQuality
723
724```ts
725  // xxx.ets
726  @Entry
727  @Component
728  struct ImageSmoothingQualityDemo {
729    private settings: RenderingContextSettings = new RenderingContextSettings(true);
730    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
731    private img:ImageBitmap = new ImageBitmap("common/images/example.jpg");
732
733    build() {
734      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
735        Canvas(this.context)
736          .width('100%')
737          .height('100%')
738          .backgroundColor('#ffff00')
739          .onReady(() =>{
740            let ctx = this.context
741            ctx.imageSmoothingEnabled = true
742            ctx.imageSmoothingQuality = 'high'
743            ctx.drawImage(this.img, 0, 0, 400, 200)
744          })
745      }
746      .width('100%')
747      .height('100%')
748    }
749  }
750```
751
752![ImageSmoothingQualityDemo](figures/ImageSmoothingQualityDemo.jpeg)
753
754
755### direction
756
757```ts
758  // xxx.ets
759  @Entry
760  @Component
761  struct DirectionDemo {
762    private settings: RenderingContextSettings = new RenderingContextSettings(true);
763    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
764
765    build() {
766      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
767        Canvas(this.context)
768          .width('100%')
769          .height('100%')
770          .backgroundColor('#ffff00')
771          .onReady(() =>{
772            let ctx = this.context
773            ctx.font = '48px serif';
774            ctx.textAlign = 'start'
775            ctx.fillText("Hi ltr!", 200, 50);
776
777            ctx.direction = "rtl";
778            ctx.fillText("Hi rtl!", 200, 100);
779          })
780      }
781      .width('100%')
782      .height('100%')
783    }
784  }
785```
786
787![directionDemo](figures/directionDemo.jpeg)
788
789
790### filter
791
792```ts
793  // xxx.ets
794  @Entry
795  @Component
796  struct FilterDemo {
797    private settings: RenderingContextSettings = new RenderingContextSettings(true);
798    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
799    private img:ImageBitmap = new ImageBitmap("common/images/example.jpg");
800
801    build() {
802      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
803        Canvas(this.context)
804          .width('100%')
805          .height('100%')
806          .backgroundColor('#ffff00')
807          .onReady(() =>{
808            let ctx = this.context
809            let img = this.img
810
811            ctx.drawImage(img, 0, 0, 100, 100);
812
813            ctx.filter = 'grayscale(50%)';
814            ctx.drawImage(img, 100, 0, 100, 100);
815
816            ctx.filter = 'sepia(60%)';
817            ctx.drawImage(img, 200, 0, 100, 100);
818
819            ctx.filter = 'saturate(30%)';
820            ctx.drawImage(img, 0, 100, 100, 100);
821
822            ctx.filter = 'hue-rotate(90degree)';
823            ctx.drawImage(img, 100, 100, 100, 100);
824
825            ctx.filter = 'invert(100%)';
826            ctx.drawImage(img, 200, 100, 100, 100);
827
828            ctx.filter = 'opacity(25%)';
829            ctx.drawImage(img, 0, 200, 100, 100);
830
831            ctx.filter = 'brightness(0.4)';
832            ctx.drawImage(img, 100, 200, 100, 100);
833
834            ctx.filter = 'contrast(200%)';
835            ctx.drawImage(img, 200, 200, 100, 100);
836
837            ctx.filter = 'blur(5px)';
838            ctx.drawImage(img, 0, 300, 100, 100);
839
840            let result = ctx.toDataURL()
841            console.info(result)
842          })
843      }
844      .width('100%')
845      .height('100%')
846    }
847  }
848```
849
850![filterDemo](figures/filterDemo.jpeg)
851
852## 方法
853
854以下方法在隐藏页面中调用会产生缓存,应避免在隐藏页面中频繁刷新Canvas。
855
856### fillRect
857
858fillRect(x: number, y: number, w: number, h: number): void
859
860填充一个矩形。
861
862从API version 9开始,该接口支持在ArkTS卡片中使用。
863
864**参数:**
865
866| 参数     | 类型     | 必填   | 默认值  | 说明            |
867| ------ | ------ | ---- | ---- | ------------- |
868| x      | number | 是    | 0    | 指定矩形左上角点的x坐标,单位:vp。 |
869| y      | number | 是    | 0    | 指定矩形左上角点的y坐标,单位:vp。 |
870| w      | number | 是    | 0    | 指定矩形的宽度,单位:vp。 |
871| h      | number | 是    | 0    | 指定矩形的高度,单位:vp。 |
872
873**示例:**
874
875  ```ts
876  // xxx.ets
877  @Entry
878  @Component
879  struct FillRect {
880    private settings: RenderingContextSettings = new RenderingContextSettings(true)
881    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
882
883    build() {
884      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
885        Canvas(this.context)
886          .width('100%')
887          .height('100%')
888          .backgroundColor('#ffff00')
889          .onReady(() =>{
890            this.context.fillRect(30,30,100,100)
891         })
892        }
893      .width('100%')
894      .height('100%')
895    }
896  }
897  ```
898
899  ![zh-cn_image_0000001194192436](figures/zh-cn_image_0000001194192436.png)
900
901
902### strokeRect
903
904strokeRect(x: number, y: number, w: number, h: number): void
905
906绘制具有边框的矩形,矩形内部不填充。
907
908从API version 9开始,该接口支持在ArkTS卡片中使用。
909
910**参数:**
911
912| 参数   | 类型     | 必填   | 默认值  | 说明           |
913| ---- | ------ | ---- | ---- | ------------ |
914| x    | number | 是    | 0    | 指定矩形的左上角x坐标,单位:vp。 |
915| y    | number | 是    | 0    | 指定矩形的左上角y坐标,单位:vp。 |
916| w    | number | 是    | 0    | 指定矩形的宽度,单位:vp。 |
917| h    | number | 是    | 0    | 指定矩形的高度,单位:vp。 |
918
919**示例:**
920
921  ```ts
922  // xxx.ets
923  @Entry
924  @Component
925  struct StrokeRect {
926    private settings: RenderingContextSettings = new RenderingContextSettings(true)
927    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
928
929    build() {
930      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
931        Canvas(this.context)
932          .width('100%')
933          .height('100%')
934          .backgroundColor('#ffff00')
935          .onReady(() =>{
936            this.context.strokeRect(30, 30, 200, 150)
937        })
938      }
939      .width('100%')
940      .height('100%')
941    }
942  }
943  ```
944
945  ![zh-cn_image_0000001194352436](figures/zh-cn_image_0000001194352436.png)
946
947
948### clearRect
949
950clearRect(x: number, y: number, w: number, h: number): void
951
952删除指定区域内的绘制内容。
953
954从API version 9开始,该接口支持在ArkTS卡片中使用。
955
956**参数:**
957
958| 参数   | 类型     | 必填   | 默认值  | 描述            |
959| ---- | ------ | ---- | ---- | ------------- |
960| x    | number | 是    | 0    | 指定矩形上的左上角x坐标,单位:vp。 |
961| y    | number | 是    | 0    | 指定矩形上的左上角y坐标,单位:vp。 |
962| w    | number | 是    | 0    | 指定矩形的宽度,单位:vp。 |
963| h    | number | 是    | 0    | 指定矩形的高度,单位:vp。 |
964
965**示例:**
966
967  ```ts
968  // xxx.ets
969  @Entry
970  @Component
971  struct ClearRect {
972    private settings: RenderingContextSettings = new RenderingContextSettings(true)
973    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
974
975    build() {
976      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
977        Canvas(this.context)
978          .width('100%')
979          .height('100%')
980          .backgroundColor('#ffff00')
981          .onReady(() =>{
982            this.context.fillStyle = 'rgb(0,0,255)'
983            this.context.fillRect(20,20,200,200)
984            this.context.clearRect(30,30,150,100)
985        })
986      }
987      .width('100%')
988      .height('100%')
989    }
990  }
991  ```
992
993  ![zh-cn_image_0000001238952377](figures/zh-cn_image_0000001238952377.png)
994
995
996### fillText
997
998fillText(text: string, x: number, y: number, maxWidth?: number): void
999
1000绘制填充类文本。
1001
1002从API version 9开始,该接口支持在ArkTS卡片中使用。
1003
1004**参数:**
1005
1006| 参数       | 类型     | 必填   | 默认值  | 说明              |
1007| -------- | ------ | ---- | ---- | --------------- |
1008| text     | string | 是    | ''   | 需要绘制的文本内容。      |
1009| x        | number | 是    | 0    | 需要绘制的文本的左下角x坐标,单位:vp。 |
1010| y        | number | 是    | 0    | 需要绘制的文本的左下角y坐标,单位:vp。 |
1011| maxWidth | number | 否    | -    | 指定文本允许的最大宽度,单位:vp。 |
1012
1013**示例:**
1014
1015  ```ts
1016  // xxx.ets
1017  @Entry
1018  @Component
1019  struct FillText {
1020    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1021    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1022
1023    build() {
1024      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1025        Canvas(this.context)
1026          .width('100%')
1027          .height('100%')
1028          .backgroundColor('#ffff00')
1029          .onReady(() =>{
1030            this.context.font = '30px sans-serif'
1031            this.context.fillText("Hello World!", 20, 100)
1032        })
1033      }
1034      .width('100%')
1035      .height('100%')
1036    }
1037  }
1038  ```
1039
1040  ![zh-cn_image_0000001194032458](figures/zh-cn_image_0000001194032458.png)
1041
1042
1043### strokeText
1044
1045strokeText(text: string, x: number, y: number, maxWidth?:number): void
1046
1047绘制描边类文本。
1048
1049从API version 9开始,该接口支持在ArkTS卡片中使用。
1050
1051**参数:**
1052
1053| 参数       | 类型     | 必填   | 默认值  | 描述              |
1054| -------- | ------ | ---- | ---- | --------------- |
1055| text     | string | 是    | ''   | 需要绘制的文本内容。      |
1056| x        | number | 是    | 0    | 需要绘制的文本的左下角x坐标,单位:vp。 |
1057| y        | number | 是    | 0    | 需要绘制的文本的左下角y坐标,单位:vp。 |
1058| maxWidth | number | 否    | -    | 需要绘制的文本的最大宽度,单位:vp。 |
1059
1060**示例:**
1061
1062  ```ts
1063  // xxx.ets
1064  @Entry
1065  @Component
1066  struct StrokeText {
1067    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1068    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1069
1070    build() {
1071      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1072        Canvas(this.context)
1073          .width('100%')
1074          .height('100%')
1075          .backgroundColor('#ffff00')
1076          .onReady(() =>{
1077            this.context.font = '55px sans-serif'
1078            this.context.strokeText("Hello World!", 20, 60)
1079        })
1080      }
1081      .width('100%')
1082      .height('100%')
1083    }
1084  }
1085  ```
1086
1087  ![zh-cn_image_0000001239032413](figures/zh-cn_image_0000001239032413.png)
1088
1089
1090### measureText
1091
1092measureText(text: string): TextMetrics
1093
1094该方法返回一个文本测算的对象,通过该对象可以获取指定文本的宽度值。
1095
1096从API version 9开始,该接口支持在ArkTS卡片中使用。
1097
1098**参数:**
1099
1100| 参数   | 类型     | 必填   | 默认值  | 说明         |
1101| ---- | ------ | ---- | ---- | ---------- |
1102| text | string | 是    | ''   | 需要进行测量的文本。 |
1103
1104**返回值:**
1105
1106| 类型          | 说明                                       |
1107| ----------- | ---------------------------------------- |
1108| [TextMetrics](#textmetrics) | 文本的尺寸信息。<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
1109
1110**示例:**
1111
1112  ```ts
1113  // xxx.ets
1114  @Entry
1115  @Component
1116  struct MeasureText {
1117    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1118    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1119
1120    build() {
1121      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1122        Canvas(this.context)
1123          .width('100%')
1124          .height('100%')
1125          .backgroundColor('#ffff00')
1126          .onReady(() =>{
1127            this.context.font = '50px sans-serif'
1128            this.context.fillText("Hello World!", 20, 100)
1129            this.context.fillText("width:" + this.context.measureText("Hello World!").width, 20, 200)
1130        })
1131      }
1132      .width('100%')
1133      .height('100%')
1134    }
1135  }
1136  ```
1137
1138  ![zh-cn_image_0000001193872492](figures/zh-cn_image_0000001193872492.png)
1139
1140
1141### stroke
1142
1143stroke(path?: Path2D): void
1144
1145进行边框绘制操作。
1146
1147从API version 9开始,该接口支持在ArkTS卡片中使用。
1148
1149**参数:**
1150
1151| 参数   | 类型                                       | 必填   | 默认值  | 描述           |
1152| ---- | ---------------------------------------- | ---- | ---- | ------------ |
1153| path | [Path2D](ts-components-canvas-path2d.md) | 否    | null | 需要绘制的Path2D。 |
1154
1155**示例:**
1156
1157  ```ts
1158  // xxx.ets
1159  @Entry
1160  @Component
1161  struct Stroke {
1162    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1163    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1164
1165    build() {
1166      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1167        Canvas(this.context)
1168          .width('100%')
1169          .height('100%')
1170          .backgroundColor('#ffff00')
1171          .onReady(() =>{
1172            this.context.moveTo(25, 25)
1173            this.context.lineTo(25, 105)
1174            this.context.lineTo(75, 105)
1175            this.context.lineTo(75, 25)
1176            this.context.strokeStyle = 'rgb(0,0,255)'
1177            this.context.stroke()
1178          })
1179      }
1180      .width('100%')
1181      .height('100%')
1182    }
1183  }
1184  ```
1185
1186  ![zh-cn_image_0000001238832389](figures/zh-cn_image_0000001238832389.png)
1187
1188
1189### beginPath
1190
1191beginPath(): void
1192
1193创建一个新的绘制路径。
1194
1195从API version 9开始,该接口支持在ArkTS卡片中使用。
1196
1197**示例:**
1198
1199  ```ts
1200  // xxx.ets
1201  @Entry
1202  @Component
1203  struct BeginPath {
1204    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1205    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1206
1207    build() {
1208      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1209        Canvas(this.context)
1210          .width('100%')
1211          .height('100%')
1212          .backgroundColor('#ffff00')
1213          .onReady(() =>{
1214            this.context.beginPath()
1215            this.context.lineWidth = 6
1216            this.context.strokeStyle = '#0000ff'
1217            this.context.moveTo(15, 80)
1218            this.context.lineTo(280, 160)
1219            this.context.stroke()
1220          })
1221      }
1222      .width('100%')
1223      .height('100%')
1224    }
1225  }
1226  ```
1227
1228  ![zh-cn_image_0000001238712417](figures/zh-cn_image_0000001238712417.png)
1229
1230
1231### moveTo
1232
1233moveTo(x: number, y: number): void
1234
1235路径从当前点移动到指定点。
1236
1237从API version 9开始,该接口支持在ArkTS卡片中使用。
1238
1239**参数:**
1240
1241| 参数   | 类型     | 必填   | 默认值  | 说明        |
1242| ---- | ------ | ---- | ---- | --------- |
1243| x    | number | 是    | 0    | 指定位置的x坐标,单位:vp。 |
1244| y    | number | 是    | 0    | 指定位置的y坐标,单位:vp。 |
1245
1246**示例:**
1247
1248  ```ts
1249  // xxx.ets
1250  @Entry
1251  @Component
1252  struct MoveTo {
1253    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1254    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1255
1256    build() {
1257      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1258        Canvas(this.context)
1259          .width('100%')
1260          .height('100%')
1261          .backgroundColor('#ffff00')
1262          .onReady(() =>{
1263            this.context.beginPath()
1264            this.context.moveTo(10, 10)
1265            this.context.lineTo(280, 160)
1266            this.context.stroke()
1267          })
1268      }
1269      .width('100%')
1270      .height('100%')
1271    }
1272  }
1273  ```
1274
1275  ![zh-cn_image_0000001194192438](figures/zh-cn_image_0000001194192438.png)
1276
1277
1278### lineTo
1279
1280lineTo(x: number, y: number): void
1281
1282从当前点到指定点进行路径连接。
1283
1284从API version 9开始,该接口支持在ArkTS卡片中使用。
1285
1286**参数:**
1287
1288| 参数   | 类型     | 必填   | 默认值  | 描述        |
1289| ---- | ------ | ---- | ---- | --------- |
1290| x    | number | 是    | 0    | 指定位置的x坐标,单位:vp。 |
1291| y    | number | 是    | 0    | 指定位置的y坐标,单位:vp。 |
1292
1293**示例:**
1294
1295  ```ts
1296  // xxx.ets
1297  @Entry
1298  @Component
1299  struct LineTo {
1300    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1301    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1302
1303    build() {
1304      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1305        Canvas(this.context)
1306          .width('100%')
1307          .height('100%')
1308          .backgroundColor('#ffff00')
1309          .onReady(() =>{
1310            this.context.beginPath()
1311            this.context.moveTo(10, 10)
1312            this.context.lineTo(280, 160)
1313            this.context.stroke()
1314          })
1315      }
1316      .width('100%')
1317      .height('100%')
1318    }
1319  }
1320  ```
1321
1322  ![zh-cn_image_0000001194352438](figures/zh-cn_image_0000001194352438.png)
1323
1324
1325### closePath
1326
1327closePath(): void
1328
1329结束当前路径形成一个封闭路径。
1330
1331从API version 9开始,该接口支持在ArkTS卡片中使用。
1332
1333**示例:**
1334
1335  ```ts
1336  // xxx.ets
1337  @Entry
1338  @Component
1339  struct ClosePath {
1340    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1341    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1342
1343    build() {
1344      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1345        Canvas(this.context)
1346          .width('100%')
1347          .height('100%')
1348          .backgroundColor('#ffff00')
1349          .onReady(() =>{
1350              this.context.beginPath()
1351              this.context.moveTo(30, 30)
1352              this.context.lineTo(110, 30)
1353              this.context.lineTo(70, 90)
1354              this.context.closePath()
1355              this.context.stroke()
1356          })
1357      }
1358      .width('100%')
1359      .height('100%')
1360    }
1361  }
1362  ```
1363
1364  ![zh-cn_image_0000001238952379](figures/zh-cn_image_0000001238952379.png)
1365
1366
1367### createPattern
1368
1369createPattern(image: ImageBitmap, repetition: string | null): CanvasPattern | null
1370
1371通过指定图像和重复方式创建图片填充的模板。
1372
1373从API version 9开始,该接口支持在ArkTS卡片中使用。
1374
1375**参数:**
1376
1377| 参数         | 类型                                       | 必填   | 描述                                       |
1378| ---------- | ---------------------------------------- | ---- | ---------------------------------------- |
1379| image      | [ImageBitmap](ts-components-canvas-imagebitmap.md) | 是    | 图源对象,具体参考ImageBitmap对象。                  |
1380| repetition | string \| null                            | 是    | 设置图像重复的方式,取值为:'repeat'、'repeat-x'、&nbsp'repeat-y'、'no-repeat'、'clamp'、'mirror'。<br/>默认值:'' |
1381
1382**返回值:**
1383
1384| 类型                                       | 说明                      |
1385| ---------------------------------------- | ----------------------- |
1386| [CanvasPattern](ts-components-canvas-canvaspattern.md#canvaspattern) \| null | 通过指定图像和重复方式创建图片填充的模板对象。 |
1387
1388**示例:**
1389
1390  ```ts
1391  // xxx.ets
1392  @Entry
1393  @Component
1394  struct CreatePattern {
1395    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1396    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1397    private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg")
1398
1399    build() {
1400      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1401        Canvas(this.context)
1402          .width('100%')
1403          .height('100%')
1404          .backgroundColor('#ffff00')
1405          .onReady(() =>{
1406            let pattern = this.context.createPattern(this.img, 'repeat')
1407            if (pattern) {
1408              this.context.fillStyle = pattern
1409            }
1410            this.context.fillRect(0, 0, 200, 200)
1411          })
1412      }
1413      .width('100%')
1414      .height('100%')
1415    }
1416  }
1417  ```
1418
1419  ![zh-cn_image_0000001194032460](figures/zh-cn_image_0000001194032460.png)
1420
1421
1422### bezierCurveTo
1423
1424bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void
1425
1426创建三次贝赛尔曲线的路径。
1427
1428从API version 9开始,该接口支持在ArkTS卡片中使用。
1429
1430**参数:**
1431
1432| 参数   | 类型     | 必填   | 默认值  | 描述             |
1433| ---- | ------ | ---- | ---- | -------------- |
1434| cp1x | number | 是    | 0    | 第一个贝塞尔参数的x坐标值,单位:vp。 |
1435| cp1y | number | 是    | 0    | 第一个贝塞尔参数的y坐标值,单位:vp。 |
1436| cp2x | number | 是    | 0    | 第二个贝塞尔参数的x坐标值,单位:vp。 |
1437| cp2y | number | 是    | 0    | 第二个贝塞尔参数的y坐标值,单位:vp。 |
1438| x    | number | 是    | 0    | 路径结束时的x坐标值,单位:vp。 |
1439| y    | number | 是    | 0    | 路径结束时的y坐标值,单位:vp。 |
1440
1441**示例:**
1442
1443  ```ts
1444  // xxx.ets
1445  @Entry
1446  @Component
1447  struct BezierCurveTo {
1448    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1449    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1450
1451    build() {
1452      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1453        Canvas(this.context)
1454          .width('100%')
1455          .height('100%')
1456          .backgroundColor('#ffff00')
1457          .onReady(() =>{
1458            this.context.beginPath()
1459            this.context.moveTo(10, 10)
1460            this.context.bezierCurveTo(20, 100, 200, 100, 200, 20)
1461            this.context.stroke()
1462          })
1463      }
1464      .width('100%')
1465      .height('100%')
1466    }
1467  }
1468  ```
1469
1470  ![zh-cn_image_0000001239032415](figures/zh-cn_image_0000001239032415.png)
1471
1472
1473### quadraticCurveTo
1474
1475quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void
1476
1477创建二次贝赛尔曲线的路径。
1478
1479从API version 9开始,该接口支持在ArkTS卡片中使用。
1480
1481**参数:**
1482
1483| 参数   | 类型     | 必填   | 默认值  | 描述          |
1484| ---- | ------ | ---- | ---- | ----------- |
1485| cpx  | number | 是    | 0    | 贝塞尔参数的x坐标值,单位:vp。 |
1486| cpy  | number | 是    | 0    | 贝塞尔参数的y坐标值,单位:vp。 |
1487| x    | number | 是    | 0    | 路径结束时的x坐标值,单位:vp。 |
1488| y    | number | 是    | 0    | 路径结束时的y坐标值,单位:vp。 |
1489
1490**示例:**
1491
1492  ```ts
1493  // xxx.ets
1494  @Entry
1495  @Component
1496  struct QuadraticCurveTo {
1497    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1498    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1499
1500    build() {
1501      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1502        Canvas(this.context)
1503          .width('100%')
1504          .height('100%')
1505          .backgroundColor('#ffff00')
1506          .onReady(() =>{
1507            this.context.beginPath()
1508            this.context.moveTo(20, 20)
1509            this.context.quadraticCurveTo(100, 100, 200, 20)
1510            this.context.stroke()
1511        })
1512      }
1513      .width('100%')
1514      .height('100%')
1515    }
1516  }
1517  ```
1518
1519  ![zh-cn_image_0000001193872494](figures/zh-cn_image_0000001193872494.png)
1520
1521
1522### arc
1523
1524arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void
1525
1526绘制弧线路径。
1527
1528从API version 9开始,该接口支持在ArkTS卡片中使用。
1529
1530**参数:**
1531
1532| 参数               | 类型      | 必填   | 默认值   | 描述         |
1533| ---------------- | ------- | ---- | ----- | ---------- |
1534| x                | number  | 是    | 0     | 弧线圆心的x坐标值,单位:vp。 |
1535| y                | number  | 是    | 0     | 弧线圆心的y坐标值,单位:vp。 |
1536| radius           | number  | 是    | 0     | 弧线的圆半径,单位:vp。 |
1537| startAngle       | number  | 是    | 0     | 弧线的起始弧度。   |
1538| endAngle         | number  | 是    | 0     | 弧线的终止弧度。   |
1539| counterclockwise | boolean | 否    | false | 是否逆时针绘制圆弧。 |
1540
1541**示例:**
1542
1543  ```ts
1544  // xxx.ets
1545  @Entry
1546  @Component
1547  struct Arc {
1548    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1549    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1550
1551    build() {
1552      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1553        Canvas(this.context)
1554          .width('100%')
1555          .height('100%')
1556          .backgroundColor('#ffff00')
1557          .onReady(() =>{
1558            this.context.beginPath()
1559            this.context.arc(100, 75, 50, 0, 6.28)
1560            this.context.stroke()
1561          })
1562      }
1563      .width('100%')
1564      .height('100%')
1565    }
1566  }
1567  ```
1568
1569  ![zh-cn_image_0000001238832391](figures/zh-cn_image_0000001238832391.jpeg)
1570
1571
1572### arcTo
1573
1574arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void
1575
1576依据圆弧经过的点和圆弧半径创建圆弧路径。
1577
1578从API version 9开始,该接口支持在ArkTS卡片中使用。
1579
1580**参数:**
1581
1582| 参数     | 类型     | 必填   | 默认值  | 描述              |
1583| ------ | ------ | ---- | ---- | --------------- |
1584| x1     | number | 是    | 0    | 圆弧经过的第一个点的x坐标值,单位:vp。 |
1585| y1     | number | 是    | 0    | 圆弧经过的第一个点的y坐标值,单位:vp。 |
1586| x2     | number | 是    | 0    | 圆弧经过的第二个点的x坐标值,单位:vp。 |
1587| y2     | number | 是    | 0    | 圆弧经过的第二个点的y坐标值,单位:vp。 |
1588| radius | number | 是    | 0    | 圆弧的圆半径值,单位:vp。 |
1589
1590**示例:**
1591
1592  ```ts
1593  // xxx.ets
1594  @Entry
1595  @Component
1596  struct ArcTo {
1597    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1598    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1599
1600    build() {
1601      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1602        Canvas(this.context)
1603          .width('100%')
1604          .height('100%')
1605          .backgroundColor('#ffff00')
1606          .onReady(() =>{
1607            this.context.moveTo(100, 20)
1608            this.context.arcTo(150, 20, 150, 70, 50)
1609            this.context.stroke()
1610          })
1611      }
1612      .width('100%')
1613      .height('100%')
1614    }
1615  }
1616  ```
1617
1618  ![zh-cn_image_0000001238712419](figures/zh-cn_image_0000001238712419.png)
1619
1620
1621### ellipse
1622
1623ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void
1624
1625在规定的矩形区域绘制一个椭圆。
1626
1627从API version 9开始,该接口支持在ArkTS卡片中使用。
1628
1629**参数:**
1630
1631| 参数               | 类型      | 必填   | 默认值   | 说明                                       |
1632| ---------------- | ------- | ---- | ----- | ---------------------------------------- |
1633| x                | number  | 是    | 0     | 椭圆圆心的x轴坐标,单位:vp。 |
1634| y                | number  | 是    | 0     | 椭圆圆心的y轴坐标,单位:vp。 |
1635| radiusX          | number  | 是    | 0     | 椭圆x轴的半径长度,单位:vp。 |
1636| radiusY          | number  | 是    | 0     | 椭圆y轴的半径长度,单位:vp。 |
1637| rotation         | number  | 是    | 0     | 椭圆的旋转角度,单位为弧度。                           |
1638| startAngle       | number  | 是    | 0     | 椭圆绘制的起始点角度,以弧度表示。                        |
1639| endAngle         | number  | 是    | 0     | 椭圆绘制的结束点角度,以弧度表示。                        |
1640| counterclockwise | boolean | 否    | false | 是否以逆时针方向绘制椭圆。<br>true:逆时针方向绘制椭圆。<br>false:顺时针方向绘制椭圆。 |
1641
1642**示例:**
1643
1644  ```ts
1645  // xxx.ets
1646  @Entry
1647  @Component
1648  struct CanvasExample {
1649    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1650    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1651
1652    build() {
1653      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1654        Canvas(this.context)
1655          .width('100%')
1656          .height('100%')
1657          .backgroundColor('#ffff00')
1658          .onReady(() =>{
1659            this.context.beginPath()
1660            this.context.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI * 2, false)
1661            this.context.stroke()
1662            this.context.beginPath()
1663            this.context.ellipse(200, 300, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI * 2, true)
1664            this.context.stroke()
1665          })
1666      }
1667      .width('100%')
1668      .height('100%')
1669    }
1670  }
1671  ```
1672
1673  ![zh-cn_image_0000001194192440](figures/zh-cn_image_0000001194192440.jpeg)
1674
1675
1676### rect
1677
1678rect(x: number, y: number, w: number, h: number): void
1679
1680创建矩形路径。
1681
1682从API version 9开始,该接口支持在ArkTS卡片中使用。
1683
1684**参数:**
1685
1686| 参数   | 类型     | 必填   | 默认值  | 描述            |
1687| ---- | ------ | ---- | ---- | ------------- |
1688| x    | number | 是    | 0    | 指定矩形的左上角x坐标值,单位:vp。 |
1689| y    | number | 是    | 0    | 指定矩形的左上角y坐标值,单位:vp。 |
1690| w    | number | 是    | 0    | 指定矩形的宽度,单位:vp。 |
1691| h    | number | 是    | 0    | 指定矩形的高度,单位:vp。 |
1692
1693**示例:**
1694
1695  ```ts
1696  // xxx.ets
1697  @Entry
1698  @Component
1699  struct CanvasExample {
1700    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1701    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1702
1703    build() {
1704      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1705        Canvas(this.context)
1706          .width('100%')
1707          .height('100%')
1708          .backgroundColor('#ffff00')
1709          .onReady(() =>{
1710            this.context.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20)
1711            this.context.stroke()
1712          })
1713      }
1714      .width('100%')
1715      .height('100%')
1716    }
1717  }
1718  ```
1719
1720  ![zh-cn_image_0000001194352440](figures/zh-cn_image_0000001194352440.jpeg)
1721
1722
1723### fill
1724
1725fill(fillRule?: CanvasFillRule): void
1726
1727对封闭路径进行填充。
1728
1729从API version 9开始,该接口支持在ArkTS卡片中使用。
1730
1731**参数:**
1732
1733| 参数       | 类型             | 必填   | 默认值       | 描述                                       |
1734| -------- | -------------- | ---- | --------- | ---------------------------------------- |
1735| fillRule | [CanvasFillRule](ts-canvasrenderingcontext2d.md#canvasfillrule) | 否    | "nonzero" | 指定要填充对象的规则。<br/>可选参数为:"nonzero", "evenodd"。 |
1736
1737
1738**示例:**
1739
1740  ```ts
1741  // xxx.ets
1742  @Entry
1743  @Component
1744  struct Fill {
1745    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1746    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1747
1748    build() {
1749      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1750        Canvas(this.context)
1751          .width('100%')
1752          .height('100%')
1753          .backgroundColor('#ffff00')
1754          .onReady(() =>{
1755            this.context.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20)
1756            this.context.fill()
1757          })
1758      }
1759      .width('100%')
1760      .height('100%')
1761    }
1762  }
1763  ```
1764
1765  ![zh-cn_image_0000001238952381](figures/zh-cn_image_0000001238952381.png)
1766
1767
1768fill(path: Path2D, fillRule?: CanvasFillRule): void
1769
1770对封闭路径进行填充。
1771
1772从API version 9开始,该接口支持在ArkTS卡片中使用。
1773
1774**参数:**
1775
1776| 参数       | 类型             | 必填   | 默认值       | 描述                                       |
1777| -------- | -------------- | ---- | --------- | ---------------------------------------- |
1778| path     | [Path2D](ts-components-canvas-path2d.md)         | 是    |           | Path2D填充路径。                              |
1779| fillRule | [CanvasFillRule](ts-canvasrenderingcontext2d.md#canvasfillrule) | 否    | "nonzero" | 指定要填充对象的规则。<br/>可选参数为:"nonzero", "evenodd"。 |
1780
1781
1782**示例:**
1783
1784```ts
1785// xxx.ets
1786@Entry
1787@Component
1788struct Fill {
1789  private settings: RenderingContextSettings = new RenderingContextSettings(true)
1790  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1791
1792  build() {
1793    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1794      Canvas(this.context)
1795        .width('100%')
1796        .height('100%')
1797        .backgroundColor('#ffff00')
1798        .onReady(() =>{
1799          let region = new Path2D()
1800          region.moveTo(30, 90)
1801          region.lineTo(110, 20)
1802          region.lineTo(240, 130)
1803          region.lineTo(60, 130)
1804          region.lineTo(190, 20)
1805          region.lineTo(270, 90)
1806          region.closePath()
1807          // Fill path
1808          this.context.fillStyle = '#00ff00'
1809          this.context.fill(region, "evenodd")
1810        })
1811    }
1812    .width('100%')
1813    .height('100%')
1814  }
1815}
1816```
1817
1818 ![zh-cn_image_000000127777774](figures/zh-cn_image_000000127777774.png)
1819
1820
1821### clip
1822
1823clip(fillRule?: CanvasFillRule): void
1824
1825设置当前路径为剪切路径。
1826
1827从API version 9开始,该接口支持在ArkTS卡片中使用。
1828
1829**参数:**
1830
1831| 参数       | 类型             | 必填   | 默认值       | 描述                                       |
1832| -------- | -------------- | ---- | --------- | ---------------------------------------- |
1833| fillRule | [CanvasFillRule](#canvasfillrule) | 否    | "nonzero" | 指定要剪切对象的规则。<br/>可选参数为:"nonzero", "evenodd"。 |
1834
1835**示例:**
1836
1837  ```ts
1838  // xxx.ets
1839  @Entry
1840  @Component
1841  struct Clip {
1842    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1843    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1844
1845    build() {
1846      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1847        Canvas(this.context)
1848          .width('100%')
1849          .height('100%')
1850          .backgroundColor('#ffff00')
1851          .onReady(() =>{
1852            this.context.rect(0, 0, 100, 200)
1853            this.context.stroke()
1854            this.context.clip()
1855            this.context.fillStyle = "rgb(255,0,0)"
1856            this.context.fillRect(0, 0, 200, 200)
1857          })
1858      }
1859      .width('100%')
1860      .height('100%')
1861    }
1862  }
1863  ```
1864
1865  ![zh-cn_image_0000001194032462](figures/zh-cn_image_0000001194032462.png)
1866
1867
1868clip(path: Path2D, fillRule?: CanvasFillRule): void
1869
1870设置当前路径为剪切路径
1871
1872从API version 9开始,该接口支持在ArkTS卡片中使用。
1873
1874**参数:**
1875
1876| 参数       | 类型             | 必填   | 默认值       | 描述                                       |
1877| -------- | -------------- | ---- | --------- | ---------------------------------------- |
1878| path     | [Path2D](ts-components-canvas-path2d.md)         | 是    | -         | Path2D剪切路径。                              |
1879| fillRule | [CanvasFillRule](#canvasfillrule) | 否    | "nonzero" | 指定要剪切对象的规则。<br/>可选参数为:"nonzero", "evenodd"。 |
1880
1881
1882**示例:**
1883
1884  ```ts
1885  // xxx.ets
1886  @Entry
1887  @Component
1888  struct Clip {
1889    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1890    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1891    build() {
1892      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1893        Canvas(this.context)
1894          .width('100%')
1895          .height('100%')
1896          .backgroundColor('#ffff00')
1897          .onReady(() =>{
1898            let region = new Path2D()
1899            region.moveTo(30, 90)
1900            region.lineTo(110, 20)
1901            region.lineTo(240, 130)
1902            region.lineTo(60, 130)
1903            region.lineTo(190, 20)
1904            region.lineTo(270, 90)
1905            region.closePath()
1906            this.context.clip(region,"evenodd")
1907            this.context.fillStyle = "rgb(0,255,0)"
1908            this.context.fillRect(0, 0, this.context.width, this.context.height)
1909          })
1910      }
1911      .width('100%')
1912      .height('100%')
1913    }
1914  }
1915  ```
1916
1917  ![zh-cn_image_000000127777779](figures/zh-cn_image_000000127777779.png)
1918
1919
1920### resetTransform
1921
1922resetTransform(): void
1923
1924使用单位矩阵重新设置当前矩阵。该接口为空接口。
1925
1926从API version 9开始,该接口支持在ArkTS卡片中使用。
1927
1928
1929### rotate
1930
1931rotate(angle: number): void
1932
1933针对当前坐标轴进行顺时针旋转。
1934
1935从API version 9开始,该接口支持在ArkTS卡片中使用。
1936
1937**参数:**
1938
1939| 参数    | 类型     | 必填   | 默认值  | 描述                                       |
1940| ----- | ------ | ---- | ---- | ---------------------------------------- |
1941| angle | number | 是    | 0    | 设置顺时针旋转的弧度值,可以通过Math.PI&nbsp;/&nbsp;180将角度转换为弧度值。 |
1942
1943**示例:**
1944
1945  ```ts
1946  // xxx.ets
1947  @Entry
1948  @Component
1949  struct Rotate {
1950    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1951    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1952
1953    build() {
1954      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
1955        Canvas(this.context)
1956          .width('100%')
1957          .height('100%')
1958          .backgroundColor('#ffff00')
1959          .onReady(() =>{
1960            this.context.rotate(45 * Math.PI / 180)
1961            this.context.fillRect(70, 20, 50, 50)
1962          })
1963      }
1964      .width('100%')
1965      .height('100%')
1966    }
1967  }
1968  ```
1969
1970  ![zh-cn_image_0000001239032417](figures/zh-cn_image_0000001239032417.png)
1971
1972
1973### scale
1974
1975scale(x: number, y: number): void
1976
1977设置canvas画布的缩放变换属性,后续的绘制操作将按照缩放比例进行缩放。
1978
1979从API version 9开始,该接口支持在ArkTS卡片中使用。
1980
1981**参数:**
1982
1983| 参数   | 类型     | 必填   | 默认值  | 描述          |
1984| ---- | ------ | ---- | ---- | ----------- |
1985| x    | number | 是    | 0    | 设置水平方向的缩放值。 |
1986| y    | number | 是    | 0    | 设置垂直方向的缩放值。 |
1987
1988**示例:**
1989
1990  ```ts
1991  // xxx.ets
1992  @Entry
1993  @Component
1994  struct Scale {
1995    private settings: RenderingContextSettings = new RenderingContextSettings(true)
1996    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
1997
1998    build() {
1999      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2000        Canvas(this.context)
2001          .width('100%')
2002          .height('100%')
2003          .backgroundColor('#ffff00')
2004          .onReady(() =>{
2005            this.context.lineWidth = 3
2006            this.context.strokeRect(30, 30, 50, 50)
2007            this.context.scale(2, 2) // Scale to 200%
2008            this.context.strokeRect(30, 30, 50, 50)
2009          })
2010      }
2011      .width('100%')
2012      .height('100%')
2013    }
2014  }
2015  ```
2016
2017  ![zh-cn_image_0000001193872498](figures/zh-cn_image_0000001193872498.png)
2018
2019
2020### transform
2021
2022transform(a: number, b: number, c: number, d: number, e: number, f: number): void
2023
2024transform方法对应一个变换矩阵,想对一个图形进行变化的时候,只要设置此变换矩阵相应的参数,对图形的各个定点的坐标分别乘以这个矩阵,就能得到新的定点的坐标。矩阵变换效果可叠加。
2025
2026从API version 9开始,该接口支持在ArkTS卡片中使用。
2027
2028> **说明:**
2029> 变换后的坐标计算方式(x和y为变换前坐标,x'和y'为变换后坐标):
2030>
2031> - x' = scaleX \* x + skewY \* y + translateX
2032>
2033> - y' = skewX \* x + scaleY \* y + translateY
2034
2035**参数:**
2036
2037| 参数   | 类型     | 必填   | 默认值  | 描述                   |
2038| ---- | ------ | ---- | ---- | -------------------- |
2039| a    | number | 是    | 0    | scaleX: 指定水平缩放值。     |
2040| b    | number | 是    | 0    | skewX: 指定垂直倾斜值。      |
2041| c    | number | 是    | 0    | skewY: 指定水平倾斜值。      |
2042| d    | number | 是    | 0    | scaleY: 指定垂直缩放值。     |
2043| e    | number | 是    | 0    | translateX: 指定水平移动值,单位:vp。 |
2044| f    | number | 是    | 0    | translateY: 指定垂直移动值,单位:vp。 |
2045
2046**示例:**
2047
2048  ```ts
2049  // xxx.ets
2050  @Entry
2051  @Component
2052  struct Transform {
2053    private settings: RenderingContextSettings = new RenderingContextSettings(true)
2054    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2055
2056    build() {
2057      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2058        Canvas(this.context)
2059          .width('100%')
2060          .height('100%')
2061          .backgroundColor('#ffff00')
2062          .onReady(() =>{
2063            this.context.fillStyle = 'rgb(0,0,0)'
2064            this.context.fillRect(0, 0, 100, 100)
2065            this.context.transform(1, 0.5, -0.5, 1, 10, 10)
2066            this.context.fillStyle = 'rgb(255,0,0)'
2067            this.context.fillRect(0, 0, 100, 100)
2068            this.context.transform(1, 0.5, -0.5, 1, 10, 10)
2069            this.context.fillStyle = 'rgb(0,0,255)'
2070            this.context.fillRect(0, 0, 100, 100)
2071          })
2072      }
2073      .width('100%')
2074      .height('100%')
2075    }
2076  }
2077  ```
2078
2079  ![zh-cn_image_0000001238832395](figures/zh-cn_image_0000001238832395.png)
2080
2081
2082### setTransform
2083
2084setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void
2085
2086setTransform方法使用的参数和transform()方法相同,但setTransform()方法会重置现有的变换矩阵并创建新的变换矩阵。
2087
2088从API version 9开始,该接口支持在ArkTS卡片中使用。
2089
2090**参数:**
2091
2092| 参数   | 类型     | 必填   | 默认值  | 描述                   |
2093| ---- | ------ | ---- | ---- | -------------------- |
2094| a    | number | 是    | 0    | scaleX: 指定水平缩放值。     |
2095| b    | number | 是    | 0    | skewX: 指定垂直倾斜值。      |
2096| c    | number | 是    | 0    | skewY: 指定水平倾斜值。      |
2097| d    | number | 是    | 0    | scaleY: 指定垂直缩放值。     |
2098| e    | number | 是    | 0    | translateX: 指定水平移动值,单位:vp。 |
2099| f    | number | 是    | 0    | translateY: 指定垂直移动值,单位:vp。 |
2100
2101**示例:**
2102
2103  ```ts
2104  // xxx.ets
2105  @Entry
2106  @Component
2107  struct SetTransform {
2108    private settings: RenderingContextSettings = new RenderingContextSettings(true)
2109    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2110
2111    build() {
2112      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2113        Canvas(this.context)
2114          .width('100%')
2115          .height('100%')
2116          .backgroundColor('#ffff00')
2117          .onReady(() =>{
2118            this.context.fillStyle = 'rgb(255,0,0)'
2119            this.context.fillRect(0, 0, 100, 100)
2120            this.context.setTransform(1,0.5, -0.5, 1, 10, 10)
2121            this.context.fillStyle = 'rgb(0,0,255)'
2122            this.context.fillRect(0, 0, 100, 100)
2123          })
2124      }
2125      .width('100%')
2126      .height('100%')
2127    }
2128  }
2129  ```
2130
2131  ![zh-cn_image_0000001238712421](figures/zh-cn_image_0000001238712421.png)
2132
2133### setTransform
2134
2135setTransform(transform?: Matrix2D): void
2136
2137以Matrix2D对象为模板重置现有的变换矩阵并创建新的变换矩阵。
2138
2139从API version 9开始,该接口支持在ArkTS卡片中使用。
2140
2141**参数:**
2142
2143| 参数        | 类型                                       | 必填   | 默认值  | 描述    |
2144| --------- | ---------------------------------------- | ---- | ---- | ----- |
2145| transform | [Matrix2D](ts-components-canvas-matrix2d.md#Matrix2D) | 否    | null | 变换矩阵。 |
2146
2147**示例:**
2148
2149  ```ts
2150  // xxx.ets
2151  @Entry
2152  @Component
2153  struct TransFormDemo {
2154    private settings: RenderingContextSettings = new RenderingContextSettings(true);
2155    private context1: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.  settings);
2156    private context2: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
2157
2158    build() {
2159      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2160        Text('context1');
2161        Canvas(this.context1)
2162          .width('230vp')
2163          .height('160vp')
2164          .backgroundColor('#ffff00')
2165          .onReady(() =>{
2166            this.context1.fillRect(100, 20, 50, 50);
2167            this.context1.setTransform(1, 0.5, -0.5, 1, 10, 10);
2168            this.context1.fillRect(100, 20, 50, 50);
2169          })
2170        Text('context2');
2171        Canvas(this.context2)
2172          .width('230vp')
2173          .height('160vp')
2174          .backgroundColor('#0ffff0')
2175          .onReady(() =>{
2176            this.context2.fillRect(100, 20, 50, 50);
2177            let storedTransform = this.context1.getTransform();
2178            this.context2.setTransform(storedTransform);
2179            this.context2.fillRect(100, 20, 50, 50);
2180          })
2181      }
2182      .width('100%')
2183      .height('100%')
2184    }
2185  }
2186  ```
2187
2188  ![zh-cn_image_0000001238712422.jpeg](figures/zh-cn_image_0000001238712422.jpeg)
2189
2190### getTransform
2191
2192getTransform(): Matrix2D
2193
2194获取当前被应用到上下文的转换矩阵。
2195
2196从API version 9开始,该接口支持在ArkTS卡片中使用。
2197
2198**返回值:**
2199
2200| 类型                                       | 说明    |
2201| ---------------------------------------- | ----- |
2202| [Matrix2D](ts-components-canvas-matrix2d.md#Matrix2D) | 矩阵对象。 |
2203
2204**示例:**
2205
2206  ```ts
2207  // xxx.ets
2208  @Entry
2209  @Component
2210  struct TransFormDemo {
2211    private settings: RenderingContextSettings = new RenderingContextSettings(true);
2212    private context1: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
2213    private context2: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
2214
2215    build() {
2216      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2217        Text('context1');
2218        Canvas(this.context1)
2219          .width('230vp')
2220          .height('120vp')
2221          .backgroundColor('#ffff00')
2222          .onReady(() =>{
2223            this.context1.fillRect(50, 50, 50, 50);
2224            this.context1.setTransform(1.2, Math.PI/8, Math.PI/6, 0.5, 30, -25);
2225            this.context1.fillRect(50, 50, 50, 50);
2226          })
2227        Text('context2');
2228        Canvas(this.context2)
2229          .width('230vp')
2230          .height('120vp')
2231          .backgroundColor('#0ffff0')
2232          .onReady(() =>{
2233            this.context2.fillRect(50, 50, 50, 50);
2234            let storedTransform = this.context1.getTransform();
2235            console.log("Matrix [scaleX = " + storedTransform.scaleX + ", scaleY = " + storedTransform.scaleY +
2236            ", rotateX = " + storedTransform.rotateX + ", rotateY = " + storedTransform.rotateY +
2237            ", translateX = " + storedTransform.translateX + ", translateY = " + storedTransform.translateY + "]")
2238            this.context2.setTransform(storedTransform);
2239            this.context2.fillRect(50,50,50,50);
2240          })
2241      }
2242      .width('100%')
2243      .height('100%')
2244    }
2245  }
2246  ```
2247
2248  ![zh-cn_image_0000001219982726.png](figures/zh-cn_image_0000001219982726.png)
2249
2250### translate
2251
2252translate(x: number, y: number): void
2253
2254移动当前坐标系的原点。
2255
2256从API version 9开始,该接口支持在ArkTS卡片中使用。
2257
2258**参数:**
2259
2260| 参数   | 类型     | 必填   | 默认值  | 描述       |
2261| ---- | ------ | ---- | ---- | -------- |
2262| x    | number | 是    | 0    | 设置水平平移量,单位:vp。 |
2263| y    | number | 是    | 0    | 设置竖直平移量,单位:vp。 |
2264
2265**示例:**
2266
2267  ```ts
2268  // xxx.ets
2269  @Entry
2270  @Component
2271  struct Translate {
2272    private settings: RenderingContextSettings = new RenderingContextSettings(true)
2273    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2274
2275    build() {
2276      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2277        Canvas(this.context)
2278          .width('100%')
2279          .height('100%')
2280          .backgroundColor('#ffff00')
2281          .onReady(() =>{
2282            this.context.fillRect(10, 10, 50, 50)
2283            this.context.translate(70, 70)
2284            this.context.fillRect(10, 10, 50, 50)
2285          })
2286      }
2287      .width('100%')
2288      .height('100%')
2289    }
2290  }
2291  ```
2292
2293  ![zh-cn_image_0000001194192446](figures/zh-cn_image_0000001194192446.png)
2294
2295
2296### drawImage
2297
2298drawImage(image: ImageBitmap | PixelMap, dx: number, dy: number): void
2299
2300drawImage(image: ImageBitmap | PixelMap, dx: number, dy: number, dw: number, dh: number): void
2301
2302drawImage(image: ImageBitmap | PixelMap, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number):void
2303
2304进行图像绘制。
2305
2306从API version 9开始,该接口支持在ArkTS卡片中使用,卡片中不支持PixelMap对象。
2307
2308**参数:**
2309
2310| 参数    | 类型                                       | 必填   | 默认值  | 描述                                       |
2311| ----- | ---------------------------------------- | ---- | ---- | ---------------------------------------- |
2312| image | [ImageBitmap](ts-components-canvas-imagebitmap.md)或[PixelMap](../apis/js-apis-image.md#pixelmap7) | 是    | null | 图片资源,请参考ImageBitmap或PixelMap。            |
2313| sx    | number                                   | 否    | 0    | 裁切源图像时距离源图像左上角的x坐标值,单位:vp。 |
2314| sy    | number                                   | 否    | 0    | 裁切源图像时距离源图像左上角的y坐标值,单位:vp。 |
2315| sw    | number                                   | 否    | 0    | 裁切源图像时需要裁切的宽度,单位:vp。 |
2316| sh    | number                                   | 否    | 0    | 裁切源图像时需要裁切的高度,单位:vp。 |
2317| dx    | number                                   | 是    | 0    | 绘制区域左上角在x轴的位置,单位:vp。 |
2318| dy    | number                                   | 是    | 0    | 绘制区域左上角在y轴的位置,单位:vp。 |
2319| dw    | number                                   | 否    | 0    | 绘制区域的宽度。当绘制区域的宽度和裁剪图像的宽度不一致时,将图像宽度拉伸或压缩为绘制区域的宽度,单位:vp。 |
2320| dh    | number                                   | 否    | 0    | 绘制区域的高度。当绘制区域的高度和裁剪图像的高度不一致时,将图像高度拉伸或压缩为绘制区域的高度,单位:vp。 |
2321
2322
2323**示例:**
2324
2325  ```ts
2326  // xxx.ets
2327  @Entry
2328  @Component
2329  struct ImageExample {
2330    private settings: RenderingContextSettings = new RenderingContextSettings(true)
2331    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2332    private img:ImageBitmap = new ImageBitmap("common/images/example.jpg")
2333
2334    build() {
2335      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2336        Canvas(this.context)
2337          .width('100%')
2338          .height('100%')
2339          .backgroundColor('#ffff00')
2340          .onReady(() =>{
2341            this.context.drawImage( this.img,0,0,500,500,0,0,400,200)
2342        })
2343      }
2344      .width('100%')
2345      .height('100%')
2346    }
2347  }
2348  ```
2349
2350  ![zh-cn_image_0000001194352442](figures/zh-cn_image_0000001194352442.png)
2351
2352
2353### createImageData
2354
2355createImageData(sw: number, sh: number): ImageData
2356
2357根据当前ImageData对象重新创建一个宽、高相同的ImageData对象,请参考[ImageData](ts-components-canvas-imagedata.md)。createImageData示例同putImageData。
2358
2359从API version 9开始,该接口支持在ArkTS卡片中使用。
2360
2361**参数:**
2362
2363| 参数   | 类型     | 必填   | 默认   | 描述            |
2364| ---- | ------ | ---- | ---- | ------------- |
2365| sw   | number | 是    | 0    | ImageData的宽度,单位:vp。 |
2366| sh   | number | 是    | 0    | ImageData的高度,单位:vp。 |
2367
2368
2369createImageData(imageData: ImageData): ImageData
2370
2371创建新的ImageData 对象,请参考[ImageData](ts-components-canvas-imagedata.md)。createImageData示例同putImageData。
2372
2373从API version 9开始,该接口支持在ArkTS卡片中使用。
2374
2375**参数:**
2376
2377| 参数        | 类型                                       | 必填   | 默认   | 描述                |
2378| --------- | ---------------------------------------- | ---- | ---- | ----------------- |
2379| imagedata | [ImageData](ts-components-canvas-imagedata.md) | 是    | null | 复制现有的ImageData对象。 |
2380
2381  **返回值:**
2382
2383| 类型                                       | 说明             |
2384| ---------------------------------------- | -------------- |
2385| [ImageData](ts-components-canvas-imagedata.md) | 新的ImageData对象。 |
2386
2387
2388### getPixelMap
2389
2390getPixelMap(sx: number, sy: number, sw: number, sh: number): PixelMap
2391
2392以当前canvas指定区域内的像素创建[PixelMap](../apis/js-apis-image.md#pixelmap7)对象,该接口存在内存拷贝行为,高耗时,应避免频繁使用。
2393
2394**参数:**
2395
2396| 参数   | 类型     | 必填   | 默认值  | 描述              |
2397| ---- | ------ | ---- | ---- | --------------- |
2398| sx   | number | 是    | 0    | 需要输出的区域的左上角x坐标,单位:vp。 |
2399| sy   | number | 是    | 0    | 需要输出的区域的左上角y坐标,单位:vp。 |
2400| sw   | number | 是    | 0    | 需要输出的区域的宽度,单位:vp。 |
2401| sh   | number | 是    | 0    | 需要输出的区域的高度,单位:vp。 |
2402
2403**返回值:**
2404
2405| 类型                                       | 说明            |
2406| ---------------------------------------- | ------------- |
2407| [PixelMap](../apis/js-apis-image.md#pixelmap7) | 新的PixelMap对象。 |
2408
2409**示例:**
2410
2411  ```ts
2412  // xxx.ets
2413  @Entry
2414  @Component
2415  struct GetPixelMap {
2416    private settings: RenderingContextSettings = new RenderingContextSettings(true)
2417    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2418    private img:ImageBitmap = new ImageBitmap("/images/star.png")
2419
2420    build() {
2421      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2422        Canvas(this.context)
2423          .width('100%')
2424          .height('100%')
2425          .backgroundColor('#ffff00')
2426          .onReady(() =>{
2427            this.context.drawImage(this.img,0,0,130,130)
2428            let pixelmap = this.context.getPixelMap(50,50,130,130)
2429            this.context.drawImage(pixelmap,150,150)
2430          })
2431      }
2432      .width('100%')
2433      .height('100%')
2434    }
2435  }
2436  ```
2437
2438  ![zh-cn_image_000000127777782](figures/zh-cn_image_000000127777782.jpeg)
2439
2440### getImageData
2441
2442getImageData(sx: number, sy: number, sw: number, sh: number): ImageData
2443
2444以当前canvas指定区域内的像素创建[ImageData](ts-components-canvas-imagedata.md)对象,该接口存在内存拷贝行为,高耗时,应避免频繁使用。
2445
2446从API version 9开始,该接口支持在ArkTS卡片中使用。
2447
2448**参数:**
2449
2450| 参数   | 类型     | 必填   | 默认值  | 描述              |
2451| ---- | ------ | ---- | ---- | --------------- |
2452| sx   | number | 是    | 0    | 需要输出的区域的左上角x坐标,单位:vp。 |
2453| sy   | number | 是    | 0    | 需要输出的区域的左上角y坐标,单位:vp。 |
2454| sw   | number | 是    | 0    | 需要输出的区域的宽度,单位:vp。 |
2455| sh   | number | 是    | 0    | 需要输出的区域的高度,单位:vp。 |
2456
2457  **返回值:**
2458
2459| 类型                                       | 说明             |
2460| ---------------------------------------- | -------------- |
2461| [ImageData](ts-components-canvas-imagedata.md) | 新的ImageData对象。 |
2462
2463
2464**示例:**
2465
2466  ```ts
2467  // xxx.ets
2468  @Entry
2469  @Component
2470  struct GetImageData {
2471    private settings: RenderingContextSettings = new RenderingContextSettings(true)
2472    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2473    private img:ImageBitmap = new ImageBitmap("/common/images/1234.png")
2474
2475    build() {
2476      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2477        Canvas(this.context)
2478          .width('100%')
2479          .height('100%')
2480          .backgroundColor('#ffff00')
2481          .onReady(() =>{
2482            this.context.drawImage(this.img,0,0,130,130)
2483            let imagedata = this.context.getImageData(50,50,130,130)
2484            this.context.putImageData(imagedata,150,150)
2485          })
2486      }
2487      .width('100%')
2488      .height('100%')
2489    }
2490  }
2491  ```
2492
2493  ![zh-cn_image_000000127777780](figures/zh-cn_image_000000127777780.png)
2494
2495
2496### putImageData
2497
2498putImageData(imageData: ImageData, dx: number | string, dy: number | string): void
2499
2500putImageData(imageData: ImageData, dx: number | string, dy: number | string, dirtyX: number | string, dirtyY: number | string, dirtyWidth: number | string, dirtyHeight: number | string): void
2501
2502使用[ImageData](ts-components-canvas-imagedata.md)数据填充新的矩形区域。
2503
2504从API version 9开始,该接口支持在ArkTS卡片中使用。
2505
2506**参数:**
2507
2508| 参数          | 类型                                       | 必填   | 默认值          | 描述                            |
2509| ----------- | ---------------------------------------- | ---- | ------------ | ----------------------------- |
2510| imagedata   | [ImageData](ts-components-canvas-imagedata.md) | 是    | null         | 包含像素值的ImageData对象。 |
2511| dx          | number&nbsp;\|&nbsp;string<sup>10+</sup> | 是    | 0            | 填充区域在x轴方向的偏移量,单位:vp。 |
2512| dy          | number&nbsp;\|&nbsp;string<sup>10+</sup> | 是    | 0            | 填充区域在y轴方向的偏移量,单位:vp。 |
2513| dirtyX      | number&nbsp;\|&nbsp;string<sup>10+</sup> | 否    | 0            | 源图像数据矩形裁切范围左上角距离源图像左上角的x轴偏移量,单位:vp。 |
2514| dirtyY      | number&nbsp;\|&nbsp;string<sup>10+</sup> | 否    | 0            | 源图像数据矩形裁切范围左上角距离源图像左上角的y轴偏移量,单位:vp。 |
2515| dirtyWidth  | number&nbsp;\|&nbsp;string<sup>10+</sup> | 否    | imagedata的宽度 | 源图像数据矩形裁切范围的宽度,单位:vp。 |
2516| dirtyHeight | number&nbsp;\|&nbsp;string<sup>10+</sup> | 否    | imagedata的高度 | 源图像数据矩形裁切范围的高度,单位:vp。 |
2517
2518**示例:**
2519
2520  ```ts
2521  // xxx.ets
2522  @Entry
2523  @Component
2524  struct PutImageData {
2525    private settings: RenderingContextSettings = new RenderingContextSettings(true)
2526    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2527
2528    build() {
2529      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2530        Canvas(this.context)
2531          .width('100%')
2532          .height('100%')
2533          .backgroundColor('#ffff00')
2534          .onReady(() =>{
2535            let imageDataNum = this.context.createImageData(100, 100)
2536            for (let i = 0; i < imageDataNum.data.length; i += 4) {
2537              imageDataNum.data[i + 0] = 255
2538              imageDataNum.data[i + 1] = 0
2539              imageDataNum.data[i + 2] = 255
2540              imageDataNum.data[i + 3] = 255
2541            }
2542            let imageData = this.context.createImageData(imageDataNum)
2543            this.context.putImageData(imageData, 10, 10)
2544          })
2545      }
2546      .width('100%')
2547      .height('100%')
2548    }
2549  }
2550  ```
2551
2552  ![zh-cn_image_0000001238952387](figures/zh-cn_image_0000001238952387.png)
2553
2554
2555### setLineDash
2556
2557setLineDash(segments: number[]): void
2558
2559设置画布的虚线样式。
2560
2561从API version 9开始,该接口支持在ArkTS卡片中使用。
2562
2563**参数:**
2564
2565| 参数       | 类型       | 描述                  |
2566| -------- | -------- | ------------------- |
2567| segments | number[] | 描述线段如何交替和线段间距长度的数组,单位:vp。 |
2568
2569**示例:**
2570
2571  ```ts
2572  // xxx.ets
2573  @Entry
2574  @Component
2575  struct SetLineDash {
2576    private settings: RenderingContextSettings = new RenderingContextSettings(true)
2577    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2578
2579    build() {
2580      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2581        Canvas(this.context)
2582          .width('100%')
2583          .height('100%')
2584          .backgroundColor('#ffff00')
2585          .onReady(() =>{
2586            this.context.arc(100, 75, 50, 0, 6.28)
2587            this.context.setLineDash([10,20])
2588            this.context.stroke()
2589          })
2590      }
2591      .width('100%')
2592      .height('100%')
2593    }
2594  }
2595  ```
2596
2597  ![zh-cn_image_000000127777771](figures/zh-cn_image_000000127777771.png)
2598
2599
2600### getLineDash
2601
2602getLineDash(): number[]
2603
2604获得当前画布的虚线样式。
2605
2606从API version 9开始,该接口支持在ArkTS卡片中使用。
2607
2608**返回值:**
2609
2610| 类型       | 说明                       |
2611| -------- | ------------------------ |
2612| number[] | 返回数组,该数组用来描述线段如何交替和间距长度,单位:vp。 |
2613
2614
2615**示例:**
2616
2617  ```ts
2618  // xxx.ets
2619  @Entry
2620  @Component
2621  struct CanvasGetLineDash {
2622    @State message: string = 'Hello World'
2623    private settings: RenderingContextSettings = new RenderingContextSettings(true)
2624    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2625
2626    build() {
2627      Row() {
2628        Column() {
2629          Text(this.message)
2630            .fontSize(50)
2631            .fontWeight(FontWeight.Bold)
2632            .onClick(()=>{
2633              console.error('before getlinedash clicked')
2634              let res = this.context.getLineDash()
2635              console.error(JSON.stringify(res))
2636            })
2637          Canvas(this.context)
2638            .width('100%')
2639            .height('100%')
2640            .backgroundColor('#ffff00')
2641            .onReady(() => {
2642              this.context.arc(100, 75, 50, 0, 6.28)
2643              this.context.setLineDash([10,20])
2644              this.context.stroke()
2645            })
2646        }
2647        .width('100%')
2648      }
2649      .height('100%')
2650    }
2651  }
2652  ```
2653![zh-cn_image_000000127777778](figures/zh-cn_image_000000127777778.png)
2654
2655
2656### transferFromImageBitmap
2657
2658transferFromImageBitmap(bitmap: ImageBitmap): void
2659
2660显示给定的ImageBitmap对象。
2661
2662从API version 9开始,该接口支持在ArkTS卡片中使用。
2663
2664**参数:**
2665
2666| 参数     | 类型                                       | 描述                 |
2667| ------ | ---------------------------------------- | ------------------ |
2668| bitmap | [ImageBitmap](ts-components-canvas-imagebitmap.md) | 待显示的ImageBitmap对象。 |
2669
2670**示例:**
2671
2672  ```ts
2673  // xxx.ets
2674  @Entry
2675  @Component
2676  struct TransferFromImageBitmap {
2677    private settings: RenderingContextSettings = new RenderingContextSettings(true)
2678    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2679    private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings)
2680
2681    build() {
2682      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2683        Canvas(this.context)
2684          .width('100%')
2685          .height('100%')
2686          .backgroundColor('#ffff00')
2687          .onReady(() =>{
2688            let imageData = this.offContext.createImageData(100, 100)
2689            for (let i = 0; i < imageData.data.length; i += 4) {
2690              imageData.data[i + 0] = 255
2691              imageData.data[i + 1] = 0
2692              imageData.data[i + 2] = 255
2693              imageData.data[i + 3] = 255
2694            }
2695            this.offContext.putImageData(imageData, 10, 10)
2696            let image = this.offContext.transferToImageBitmap()
2697            this.context.transferFromImageBitmap(image)
2698          })
2699      }
2700      .width('100%')
2701      .height('100%')
2702    }
2703  }
2704  ```
2705  ![zh-cn_image_0000001238952387](figures/zh-cn_image_0000001238952387.png)
2706
2707
2708### toDataURL
2709
2710toDataURL(type?: string, quality?: number): string
2711
2712生成一个包含图片展示的URL。
2713
2714从API version 9开始,该接口支持在ArkTS卡片中使用。
2715
2716**参数:**
2717
2718| 参数名     | 参数类型   | 必填   | 默认值         | 描述                                       |
2719| ------- | ------ | ---- | ----------- | ---------------------------------------- |
2720| type    | string | 否    | "image/png" | 可选参数,用于指定图像格式,默认格式为image/png。            |
2721| quality | number | 否    | 0.92        | 在指定图片格式为image/jpegimage/webp的情况下,可以从0到1的区间内选择图片的质量。如果超出取值范围,将会使用默认值0.92。 |
2722
2723**返回值:**
2724
2725| 类型     | 说明        |
2726| ------ | --------- |
2727| string | 图像的URL地址。 |
2728
2729**示例:**
2730
2731  ```ts
2732  // xxx.ets
2733  @Entry
2734  @Component
2735  struct CanvasExample {
2736    private settings: RenderingContextSettings = new RenderingContextSettings(true)
2737    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2738    @State toDataURL: string = ""
2739
2740    build() {
2741      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2742        Canvas(this.context)
2743          .width(100)
2744          .height(100)
2745          .onReady(() =>{
2746            this.context.fillStyle = "#00ff00"
2747            this.context.fillRect(0,0,100,100)
2748            this.toDataURL = this.context.toDataURL("image/png", 0.92)
2749          })
2750        Text(this.toDataURL)
2751      }
2752      .width('100%')
2753      .height('100%')
2754      .backgroundColor('#ffff00')
2755    }
2756  }
2757  ```
2758  ![zh-cn_image_0000001238952387](figures/zh-cn_image_0000001194192441.png)
2759
2760
2761### restore
2762
2763restore(): void
2764
2765对保存的绘图上下文进行恢复。
2766
2767从API version 9开始,该接口支持在ArkTS卡片中使用。
2768
2769**示例:**
2770
2771  ```ts
2772  // xxx.ets
2773  @Entry
2774  @Component
2775  struct CanvasExample {
2776    private settings: RenderingContextSettings = new RenderingContextSettings(true)
2777    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2778
2779    build() {
2780      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2781        Canvas(this.context)
2782          .width('100%')
2783          .height('100%')
2784          .backgroundColor('#ffff00')
2785          .onReady(() =>{
2786            this.context.save() // save the default state
2787            this.context.fillStyle = "#00ff00"
2788            this.context.fillRect(20, 20, 100, 100)
2789            this.context.restore() // restore to the default state
2790            this.context.fillRect(150, 75, 100, 100)
2791          })
2792      }
2793      .width('100%')
2794      .height('100%')
2795    }
2796  }
2797  ```
2798  ![zh-cn_image_000000127777781](figures/zh-cn_image_000000127777781.png)
2799
2800
2801### save
2802
2803save(): void
2804
2805将当前状态放入栈中,保存canvas的全部状态,通常在需要保存绘制状态时调用。
2806
2807从API version 9开始,该接口支持在ArkTS卡片中使用。
2808
2809**示例:**
2810
2811  ```ts
2812  // xxx.ets
2813  @Entry
2814  @Component
2815  struct CanvasExample {
2816    private settings: RenderingContextSettings = new RenderingContextSettings(true)
2817    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2818
2819    build() {
2820      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2821        Canvas(this.context)
2822          .width('100%')
2823          .height('100%')
2824          .backgroundColor('#ffff00')
2825          .onReady(() =>{
2826            this.context.save() // save the default state
2827            this.context.fillStyle = "#00ff00"
2828            this.context.fillRect(20, 20, 100, 100)
2829            this.context.restore() // restore to the default state
2830            this.context.fillRect(150, 75, 100, 100)
2831          })
2832      }
2833      .width('100%')
2834      .height('100%')
2835    }
2836  }
2837  ```
2838  ![zh-cn_image_000000127777781](figures/zh-cn_image_000000127777781.png)
2839
2840
2841### createLinearGradient
2842
2843createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient
2844
2845创建一个线性渐变色。
2846
2847从API version 9开始,该接口支持在ArkTS卡片中使用。
2848
2849**参数:**
2850
2851| 参数   | 类型     | 必填   | 默认值  | 描述       |
2852| ---- | ------ | ---- | ---- | -------- |
2853| x0   | number | 是    | 0    | 起点的x轴坐标,单位:vp。 |
2854| y0   | number | 是    | 0    | 起点的y轴坐标,单位:vp。 |
2855| x1   | number | 是    | 0    | 终点的x轴坐标,单位:vp。 |
2856| y1   | number | 是    | 0    | 终点的y轴坐标,单位:vp。 |
2857
2858**返回值:**
2859
2860| 类型     | 说明        |
2861| ------ | --------- |
2862| [CanvasGradient](ts-components-canvas-canvasgradient.md) | 新的CanvasGradient对象,用于在canvas上创建渐变效果。 |
2863
2864**示例:**
2865
2866  ```ts
2867  // xxx.ets
2868  @Entry
2869  @Component
2870  struct CreateLinearGradient {
2871    private settings: RenderingContextSettings = new RenderingContextSettings(true)
2872    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2873
2874    build() {
2875      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2876        Canvas(this.context)
2877          .width('100%')
2878          .height('100%')
2879          .backgroundColor('#ffff00')
2880          .onReady(() =>{
2881            let grad = this.context.createLinearGradient(50,0, 300,100)
2882            grad.addColorStop(0.0, '#ff0000')
2883            grad.addColorStop(0.5, '#ffffff')
2884            grad.addColorStop(1.0, '#00ff00')
2885            this.context.fillStyle = grad
2886            this.context.fillRect(0, 0, 400, 400)
2887          })
2888      }
2889      .width('100%')
2890      .height('100%')
2891    }
2892  }
2893  ```
2894
2895  ![zh-cn_image_0000001194032516](figures/zh-cn_image_0000001194032516.jpeg)
2896
2897
2898### createRadialGradient
2899
2900createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient
2901
2902创建一个径向渐变色。
2903
2904从API version 9开始,该接口支持在ArkTS卡片中使用。
2905
2906**参数:**
2907
2908| 参数   | 类型     | 必填   | 默认值  | 描述                |
2909| ---- | ------ | ---- | ---- | ----------------- |
2910| x0   | number | 是    | 0    | 起始圆的x轴坐标,单位:vp。 |
2911| y0   | number | 是    | 0    | 起始圆的y轴坐标,单位:vp。 |
2912| r0   | number | 是    | 0    | 起始圆的半径。必须是非负且有限的,单位:vp。 |
2913| x1   | number | 是    | 0    | 终点圆的x轴坐标,单位:vp。 |
2914| y1   | number | 是    | 0    | 终点圆的y轴坐标,单位:vp。 |
2915| r1   | number | 是    | 0    | 终点圆的半径。必须为非负且有限的,单位:vp。 |
2916
2917**返回值:**
2918
2919| 类型     | 说明        |
2920| ------ | --------- |
2921| [CanvasGradient](ts-components-canvas-canvasgradient.md) | 新的CanvasGradient对象,用于在canvas上创建渐变效果。 |
2922
2923**示例:**
2924
2925  ```ts
2926  // xxx.ets
2927  @Entry
2928  @Component
2929  struct CreateRadialGradient {
2930    private settings: RenderingContextSettings = new RenderingContextSettings(true)
2931    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2932
2933    build() {
2934      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2935        Canvas(this.context)
2936          .width('100%')
2937          .height('100%')
2938          .backgroundColor('#ffff00')
2939          .onReady(() =>{
2940            let grad = this.context.createRadialGradient(200,200,50, 200,200,200)
2941            grad.addColorStop(0.0, '#ff0000')
2942            grad.addColorStop(0.5, '#ffffff')
2943            grad.addColorStop(1.0, '#00ff00')
2944            this.context.fillStyle = grad
2945            this.context.fillRect(0, 0, 440, 440)
2946          })
2947      }
2948      .width('100%')
2949      .height('100%')
2950    }
2951  }
2952  ```
2953
2954  ![zh-cn_image_0000001238952407](figures/zh-cn_image_0000001238952407.jpeg)
2955
2956### createConicGradient<sup>10+</sup>
2957
2958createConicGradient(startAngle: number, x: number, y: number): CanvasGradient
2959
2960创建一个圆锥渐变色。
2961
2962**参数:**
2963
2964| 参数         | 类型     | 必填   | 默认值  | 描述                                  |
2965| ---------- | ------ | ---- | ---- | ----------------------------------- |
2966| startAngle | number | 是    | 0    | 开始渐变的角度,以弧度为单位。角度测量从中心右侧水平开始,顺时针移动。 |
2967| x          | number | 是    | 0    | 圆锥渐变的中心x轴坐标,单位:vp。 |
2968| y          | number | 是    | 0    | 圆锥渐变的中心y轴坐标,单位:vp。 |
2969
2970**返回值:**
2971
2972| 类型     | 说明        |
2973| ------ | --------- |
2974| [CanvasGradient](ts-components-canvas-canvasgradient.md) | 新的CanvasGradient对象,用于在canvas上创建渐变效果。 |
2975
2976**示例:**
2977
2978```ts
2979// xxx.ets
2980@Entry
2981@Component
2982struct CanvasExample {
2983  private settings: RenderingContextSettings = new RenderingContextSettings(true)
2984  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
2985
2986  build() {
2987    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
2988      Canvas(this.context)
2989        .width('100%')
2990        .height('100%')
2991        .backgroundColor('#ffffff')
2992        .onReady(() => {
2993          let grad = this.context.createConicGradient(0, 50, 80)
2994          grad.addColorStop(0.0, '#ff0000')
2995          grad.addColorStop(0.5, '#ffffff')
2996          grad.addColorStop(1.0, '#00ff00')
2997          this.context.fillStyle = grad
2998          this.context.fillRect(0, 30, 100, 100)
2999        })
3000    }
3001    .width('100%')
3002    .height('100%')
3003  }
3004}
3005```
3006
3007  ![zh-cn_image_0000001239032419](figures/zh-cn_image_0000001239032420.png)
3008
3009
3010## CanvasDirection
3011
3012从API version 9开始,该接口支持在ArkTS卡片中使用。
3013
3014| 名称      | 描述                  |
3015| ------- | ------------------- |
3016| inherit | 继承canvas组件已设定的文本方向。 |
3017| ltr     | 从左往右。               |
3018| rtl     | 从右往左。               |
3019
3020## CanvasFillRule
3021
3022从API version 9开始,该接口支持在ArkTS卡片中使用。
3023
3024| 名称      | 描述    |
3025| ------- | ----- |
3026| evenodd | 奇偶规则。 |
3027| nonzero | 非零规则。 |
3028
3029## CanvasLineCap
3030
3031从API version 9开始,该接口支持在ArkTS卡片中使用。
3032
3033| 名称     | 描述                            |
3034| ------ | ----------------------------- |
3035| butt   | 线条两端为平行线,不额外扩展。               |
3036| round  | 在线条两端延伸半个圆,直径等于线宽。            |
3037| square | 在线条两端延伸一个矩形,宽度等于线宽的一半,高度等于线宽。 |
3038
3039## CanvasLineJoin
3040
3041从API version 9开始,该接口支持在ArkTS卡片中使用。
3042
3043| 名称    | 描述                                       |
3044| ----- | ---------------------------------------- |
3045| bevel | 在线段相连处使用三角形为底填充, 每个部分矩形拐角独立。             |
3046| miter | 在相连部分的外边缘处进行延伸,使其相交于一点,形成一个菱形区域,该属性可以通过设置miterLimit属性展现效果。 |
3047| round | 在线段相连处绘制一个扇形,扇形的圆角半径是线段的宽度。              |
3048
3049## CanvasTextAlign
3050
3051从API version 9开始,该接口支持在ArkTS卡片中使用。
3052
3053| 名称     | 描述           |
3054| ------ | ------------ |
3055| center | 文本居中对齐。      |
3056| start  | 文本对齐界线开始的地方。 |
3057| end    | 文本对齐界线结束的地方。 |
3058| left   | 文本左对齐。       |
3059| right  | 文本右对齐。       |
3060
3061## CanvasTextBaseline
3062
3063从API version 9开始,该接口支持在ArkTS卡片中使用。
3064
3065| 名称          | 描述                                       |
3066| ----------- | ---------------------------------------- |
3067| alphabetic  | 文本基线是标准的字母基线。                            |
3068| bottom      | 文本基线在文本块的底部。 与ideographic基线的区别在于ideographic基线不需要考虑下行字母。 |
3069| hanging     | 文本基线是悬挂基线。                               |
3070| ideographic | 文字基线是表意字基线;如果字符本身超出了alphabetic基线,那么ideograhpic基线位置在字符本身的底部。 |
3071| middle      | 文本基线在文本块的中间。                             |
3072| top         | 文本基线在文本块的顶部。                             |
3073
3074## ImageSmoothingQuality
3075
3076从API version 9开始,该接口支持在ArkTS卡片中使用。
3077
3078| 名称     | 描述   |
3079| ------ | ---- |
3080| low    | 低画质  |
3081| medium | 中画质  |
3082| high   | 高画质  |
3083
3084## TextMetrics
3085
3086| 属性                       | 类型     | 描述                                       |
3087| ------------------------ | ------ | ---------------------------------------- |
3088| width                    | number | 只读属性,字符串的宽度。                                  |
3089| height                   | number | 只读属性,字符串的高度。                                  |
3090| actualBoundingBoxAscent  | number | 只读属性,从[CanvasRenderingContext2D.textBaseline](#canvastextbaseline)属性标明的水平线到渲染文本的矩形边界顶部的距离,当前值为0。 |
3091| actualBoundingBoxDescent | number | 只读属性,从[CanvasRenderingContext2D.textBaseline](#canvastextbaseline)属性标明的水平线到渲染文本的矩形边界底部的距离,当前值为0。 |
3092| actualBoundingBoxLeft    | number | 只读属性,平行于基线,从[CanvasRenderingContext2D.textAlign](#canvastextalign)属性确定的对齐点到文本矩形边界左侧的距离,当前值为0。 |
3093| actualBoundingBoxRight   | number | 只读属性,平行于基线,从[CanvasRenderingContext2D.textAlign](#canvastextalign)属性确定的对齐点到文本矩形边界右侧的距离,当前值为0。 |
3094| alphabeticBaseline       | number | 只读属性,从[CanvasRenderingContext2D.textBaseline](#canvastextbaseline)属性标明的水平线到线框的 alphabetic 基线的距离,当前值为0。 |
3095| emHeightAscent           | number | 只读属性,从[CanvasRenderingContext2D.textBaseline](#canvastextbaseline)属性标明的水平线到线框中 em 方块顶部的距离,当前值为0。 |
3096| emHeightDescent          | number | 只读属性,从[CanvasRenderingContext2D.textBaseline](#canvastextbaseline)属性标明的水平线到线框中 em 方块底部的距离,当前值为0。 |
3097| fontBoundingBoxAscent    | number | 只读属性,从[CanvasRenderingContext2D.textBaseline](#canvastextbaseline)属性标明的水平线到渲染文本的所有字体的矩形最高边界顶部的距离,当前值为0。 |
3098| fontBoundingBoxDescent   | number | 只读属性,从[CanvasRenderingContext2D.textBaseline](#canvastextbaseline)属性标明的水平线到渲染文本的所有字体的矩形边界最底部的距离,当前值为0。 |
3099| hangingBaseline          | number | 只读属性,从[CanvasRenderingContext2D.textBaseline](#canvastextbaseline)属性标明的水平线到线框的 hanging 基线的距离,当前值为0。 |
3100| ideographicBaseline      | number | 只读属性,从[CanvasRenderingContext2D.textBaseline](#canvastextbaseline)属性标明的水平线到线框的 ideographic 基线的距离,当前值为0。 |