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