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