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