• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# CanvasRenderingContext2D对象
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @sd-wu-->
5<!--Designer: @sunbees-->
6<!--Tester: @liuli0427-->
7<!--Adviser: @HelloCrease-->
8
9>  **说明:**
10>
11>  从API version 4开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
12
13使用CanvasRenderingContext2D在canvas画布组件上进行绘制,绘制对象可以是矩形、文本、图片等。
14
15
16**示例:**
17  ```html
18  <!-- xxx.hml -->
19  <div>
20    <canvas ref="canvas1" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
21    <input type="button" style="width: 180px; height: 60px;" value="handleClick" onclick="handleClick" />
22    <input type="button" style="width: 180px; height: 60px;" value="antialias" onclick="antialias" />
23  </div>
24  ```
25
26  ```js
27  // xxx.js
28  export default {
29    handleClick() {
30      const el = this.$refs.canvas1;
31      const ctx = el.getContext('2d');
32      ctx.beginPath();
33      ctx.arc(100, 75, 50, 0, 6.28);
34      ctx.stroke();
35    },
36    antialias() {
37      const el = this.$refs.canvas1;
38      const ctx = el.getContext('2d', { antialias: true });
39      ctx.beginPath();
40      ctx.arc(100, 75, 50, 0, 6.28);
41      ctx.stroke();
42      }
43    }
44  ```
45
46- 示意图(关闭抗锯齿)
47
48  ![zh-cn_image_0000001214837333](figures/zh-cn_image_0000001214837333.png)
49
50- 示意图(开启抗锯齿)
51
52  ![zh-cn_image_0000001127125162](figures/zh-cn_image_0000001127125162.png)
53
54
55## 属性
56
57| 名称                                       | 类型                                       | 描述                                       |
58| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
59| [fillStyle](#fillstyle)                  | &lt;color&gt;&nbsp;\|&nbsp;[CanvasGradient](js-components-canvas-canvasgradient.md)&nbsp;\|&nbsp;CanvasPattern | 指定绘制的填充色。<br/>-&nbsp;类型为&lt;color&gt;时,表示设置填充区域的颜色。<br/>-&nbsp;类型为CanvasGradient时,表示渐变对象,使用&nbsp;createLinearGradient()方法创建。<br/>-&nbsp;类型为CanvasPattern时,使用&nbsp;createPattern()方法创建。 |
60| [lineWidth](#linewidth)                  | number                                   | 设置绘制线条的宽度。                               |
61| [strokeStyle](#strokestyle)              | &lt;color&gt;&nbsp;\|&nbsp;[CanvasGradient](js-components-canvas-canvasgradient.md)&nbsp;\|&nbsp;CanvasPattern | 设置描边的颜色。<br/>-&nbsp;类型为&lt;color&gt;时,表示设置描边使用的颜色。<br/>-&nbsp;类型为CanvasGradient时,表示渐变对象,使用&nbsp;createLinearGradient()方法创建。<br/>-&nbsp;类型为CanvasPattern时,使用&nbsp;createPattern()方法创建。 |
62| [lineCap](#linecap)                      | string                                   | 指定线端点的样式,可选值为:<br/>-&nbsp;butt:线端点以方形结束。<br/>-&nbsp;round:线端点以圆形结束。<br/>-&nbsp;square:线端点以方形结束,该样式下会增加一个长度和线段厚度相同,宽度是线段厚度一半的矩形。<br>默认值:butt |
63| [lineJoin](#linejoin)                    | string                                   | 指定线段间相交的交点样式,可选值为:<br/>-&nbsp;round:在线段相连处绘制一个扇形,扇形的圆角半径是线段的宽度。<br/>-&nbsp;bevel:在线段相连处使用三角形为底填充,&nbsp;每个部分矩形拐角独立。<br/>-&nbsp;miter:在相连部分的外边缘处进行延伸,使其相交于一点,形成一个菱形区域,该属性可以通过设置miterLimit属性展现效果。<br>默认值:miter |
64| [miterLimit](#miterlimit)                | number                                   | 设置斜接面限制值,该值指定了线条相交处内角和外角的距离。<br>默认值:10   |
65| [font](#font)                            | string                                   | 设置文本绘制中的字体样式。<br/>语法:ctx.font="font-style&nbsp;font-weight&nbsp;font-size&nbsp;font-family"<sup>5+</sup><br/>-&nbsp;font-style(可选),用于指定字体样式,支持如下几种样式:normal,&nbsp;italic。<br/>-&nbsp;font-weight(可选),用于指定字体的粗细,支持如下几种类型:normal,&nbsp;bold,&nbsp;bolder,&nbsp;lighter,&nbsp;100,&nbsp;200,&nbsp;300,&nbsp;400,&nbsp;500,&nbsp;600,&nbsp;700,&nbsp;800,&nbsp;900。<br/>-&nbsp;font-size(可选),指定字号和行高,单位只支持px。<br/>-&nbsp;font-family(可选),指定字体系列,支持如下几种类型:sans-serif,&nbsp;serif,&nbsp;monospace。<br>默认值:"normal&nbsp;normal&nbsp;14px&nbsp;sans-serif" |
66| [textAlign](#textalign)                  | string                                   | 设置文本绘制中的文本对齐方式,可选值为:<br/>-&nbsp;left:文本左对齐。<br/>-&nbsp;right:文本右对齐。<br/>-&nbsp;center:文本居中对齐。<br/>-&nbsp;start:文本对齐界线开始的地方。<br/>-&nbsp;end:文本对齐界线结束的地方。<br/>ltr布局模式下start和left一致,rtl布局模式下start和right一致。<br>默认值:left |
67| [textBaseline](#textbaseline)            | string                                   | 设置文本绘制中的水平对齐方式,可选值为:<br/>-&nbsp;alphabetic:文本基线是标准的字母基线。<br/>-&nbsp;top:文本基线在文本块的顶部。<br/>-&nbsp;hanging:文本基线是悬挂基线。<br/>-&nbsp;middle:文本基线在文本块的中间。<br/>-&nbsp;ideographic:文字基线是表意字基线;如果字符本身超出了alphabetic&nbsp;基线,那么ideographic基线位置在字符本身的底部。<br/>-&nbsp;bottom:文本基线在文本块的底部。&nbsp;与&nbsp;ideographic&nbsp;基线的区别在于&nbsp;ideographic&nbsp;基线不需要考虑下行字母。<br>默认值: alphabetic |
68| [globalAlpha](#globalalpha)              | number                                   | 设置透明度,0.0为完全透明,1.0为完全不透明。                |
69| [lineDashOffset](#linedashoffset)        | number                                   | 设置画布的虚线偏移量,精度为float。<br>默认值:0.0          |
70| [globalCompositeOperation](#globalcompositeoperation) | string                                   | 设置合成操作的方式。类型字段可选值有source-over,source-atop,source-in,source-out,destination-over,destination-atop,destination-in,destination-out,lighter,copy,xor。具体请参考[表 类型字段说明](#globalcompositeoperation)。<br>默认值:source-over |
71| [shadowBlur](#shadowblur)                | number                                   | 设置绘制阴影时的模糊级别,值越大越模糊,精度为float。<br>默认值:0.0 |
72| [shadowColor](#shadowcolor)              | &lt;color&gt;                            | 设置绘制阴影时的阴影颜色。                            |
73| [shadowOffsetX](#shadowoffsetx)          | number                                   | 设置绘制阴影时和原有对象的水平偏移值。                      |
74| [shadowOffsetY](#shadowoffsety)          | number                                   | 设置绘制阴影时和原有对象的垂直偏移值。                      |
75| [imageSmoothingEnabled](#imagesmoothingenabled6)<sup>6+</sup> | boolean                                  | 用于设置绘制图片时是否进行图像平滑度调整,true为启用,false为不启用。<br>默认值:true |
76
77
78### fillStyle
79
80  ```html
81<!-- xxx.hml -->
82<div>
83  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
84</div>
85  ```
86
87```js
88// xxx.js
89export default {
90  onShow() {
91    const el = this.$refs.canvas;
92    const ctx = el.getContext('2d');
93    ctx.fillStyle = '#0000ff';
94    ctx.fillRect(20, 20, 150, 100);
95  }
96}
97```
98
99![zh-cn_image_0000001166962736](figures/zh-cn_image_0000001166962736.png)
100
101
102### lineWidth
103
104```html
105<!-- xxx.hml -->
106<div>
107  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
108</div>
109```
110
111```js
112// xxx.js
113export default {
114  onShow() {
115    const el = this.$refs.canvas;
116    const ctx = el.getContext('2d');
117    ctx.lineWidth = 5;
118    ctx.strokeRect(25, 25, 85, 105);
119  }
120}
121
122```
123
124![zh-cn_image_0000001166484430](figures/zh-cn_image_0000001166484430.png)
125
126
127### strokeStyle
128
129```html
130<!-- xxx.hml -->
131<div>
132  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
133</div>
134```
135
136```js
137// xxx.js
138export default {
139  onShow() {
140    const el = this.$refs.canvas;
141    const ctx = el.getContext('2d');
142    ctx.lineWidth = 10;
143    ctx.strokeStyle = '#0000ff';
144    ctx.strokeRect(25, 25, 155, 105);
145  }
146}
147```
148
149
150![zh-cn_image_0000001212124299](figures/zh-cn_image_0000001212124299.png)
151
152### lineCap
153
154```html
155<!-- xxx.hml -->
156<div>
157  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
158</div>
159```
160
161```js
162// xxx.js
163export default {
164  onShow() {
165    const el = this.$refs.canvas;
166    const ctx = el.getContext('2d');
167    ctx.lineWidth = 8;
168    ctx.beginPath();
169    ctx.lineCap = 'round';
170    ctx.moveTo(30, 50);
171    ctx.lineTo(220, 50);
172    ctx.stroke();
173  }
174}
175```
176
177![zh-cn_image_0000001214837127](figures/zh-cn_image_0000001214837127.png)
178
179### lineJoin
180
181```html
182<!-- xxx.hml -->
183<div>
184  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
185</div>
186```
187
188```js
189// xxx.js
190export default {
191  onShow() {
192    const el = this.$refs.canvas;
193    const ctx = el.getContext('2d');
194    ctx.beginPath();
195    ctx.lineWidth = 8;
196    ctx.lineJoin = 'miter';
197    ctx.moveTo(30, 30);
198    ctx.lineTo(120, 60);
199    ctx.lineTo(30, 110);
200    ctx.stroke();
201  }
202}
203```
204
205![zh-cn_image_0000001214717247](figures/zh-cn_image_0000001214717247.png)
206
207### miterLimit
208
209```html
210<!-- xxx.hml -->
211<div>
212  <canvas ref="canvas" style="width: 500px; height: 500px; "></canvas>
213</div>
214```
215
216```js
217// xxx.js
218export default {
219  onShow() {
220    const el = this.$refs.canvas;
221    const ctx = el.getContext('2d');
222    ctx.lineWidth =14;
223    ctx.lineJoin = 'miter';
224    ctx.miterLimit = 3;
225    ctx.moveTo(30, 30);
226    ctx.lineTo(120, 60);
227    ctx.lineTo(30, 70);
228    ctx.stroke();
229  }
230}
231```
232
233![zh-cn_image_0000001167001464](figures/zh-cn_image_0000001167001464.png)
234
235
236### font
237
238```html
239<!-- xxx.hml -->
240<div>
241  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
242</div>
243```
244
245```js
246// xxx.js
247export default {
248  onShow() {
249    const el = this.$refs.canvas;
250    const ctx = el.getContext('2d');
251    ctx.font = '30px sans-serif';
252    ctx.fillText("Hello World", 20, 60);
253  }
254}
255```
256
257![zh-cn_image_0000001167046832](figures/zh-cn_image_0000001167046832.png)
258
259
260### textAlign
261
262```html
263<!-- xxx.hml -->
264<div>
265  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
266</div>
267```
268
269```js
270// xxx.js
271export default {
272  onShow() {
273    const el = this.$refs.canvas;
274    const ctx = el.getContext('2d');
275    ctx.strokeStyle = '#0000ff';
276    ctx.moveTo(140, 10);
277    ctx.lineTo(140, 160);
278    ctx.stroke();
279    ctx.font = '18px sans-serif';
280    // Show the different textAlign values
281    ctx.textAlign = 'start';
282    ctx.fillText('textAlign=start', 140, 60);
283    ctx.textAlign = 'end';
284    ctx.fillText('textAlign=end', 140, 80);
285    ctx.textAlign = 'left';
286    ctx.fillText('textAlign=left', 140, 100);
287    ctx.textAlign = 'center';
288    ctx.fillText('textAlign=center',140, 120);
289    ctx.textAlign = 'right';
290    ctx.fillText('textAlign=right',140, 140);
291  }
292}
293
294```
295
296
297![zh-cn_image_0000001167472798](figures/zh-cn_image_0000001167472798.png)
298
299### textBaseline
300
301```html
302<!-- xxx.hml -->
303<div>
304  <canvas ref="canvas" style="width: 500px; height: 500px; "></canvas>
305</div>
306```
307
308```js
309// xxx.js
310export default {
311  onShow() {
312    const el = this.$refs.canvas;
313    const ctx = el.getContext('2d');
314    ctx.strokeStyle = '#0000ff';
315    ctx.moveTo(0, 120);
316    ctx.lineTo(400, 120);
317    ctx.stroke();
318    ctx.font = '20px sans-serif';
319    ctx.textBaseline = 'top';
320    ctx.fillText('Top', 10, 120);
321    ctx.textBaseline = 'bottom';
322    ctx.fillText('Bottom', 55, 120);
323    ctx.textBaseline = 'middle';
324    ctx.fillText('Middle', 125, 120);
325    ctx.textBaseline = 'alphabetic';
326    ctx.fillText('Alphabetic', 195, 120);
327    ctx.textBaseline = 'hanging';
328    ctx.fillText('Hanging', 295, 120);
329  }
330}
331```
332
333![zh-cn_image_0000001169315920](figures/zh-cn_image_0000001169315920.png)
334
335### globalAlpha
336
337```html
338<!-- xxx.hml -->
339<div>
340  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
341</div>
342```
343
344```js
345// xxx.js
346export default {
347  onShow() {
348    const el = this.$refs.canvas;
349    const ctx = el.getContext('2d');
350    ctx.fillStyle = 'rgb(255,0,0)';
351    ctx.fillRect(0, 0, 50, 50);
352    ctx.globalAlpha = 0.4;
353    ctx.fillStyle = 'rgb(0,0,255)';
354    ctx.fillRect(50, 50, 50, 50);
355
356  }
357}
358```
359
360![zh-cn_image_0000001167953648](figures/zh-cn_image_0000001167953648.png)
361
362### lineDashOffset
363
364```html
365<!-- xxx.hml -->
366<div>
367  <canvas ref="canvas" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
368</div>
369```
370
371```js
372// xxx.js
373export default {
374  onShow() {
375    const el = this.$refs.canvas;
376    const ctx = el.getContext('2d');
377    ctx.arc(100, 75, 50, 0, 6.28);
378    ctx.setLineDash([10,20]);
379    ctx.lineDashOffset = 10.0;
380    ctx.stroke();
381  }
382}
383```
384
385![zh-cn_image_0000001167950468](figures/zh-cn_image_0000001167950468.png)
386
387### globalCompositeOperation
388
389类型字段说明。
390
391| 值                | 描述                       |
392| ---------------- | ------------------------ |
393| source-over      | 在现有绘制内容上显示新绘制内容,属于默认值。   |
394| source-atop      | 在现有绘制内容顶部显示新绘制内容。        |
395| source-in        | 在现有绘制内容中显示新绘制内容。         |
396| source-out       | 在现有绘制内容之外显示新绘制内容。        |
397| destination-over | 在新绘制内容上方显示现有绘制内容。        |
398| destination-atop | 在新绘制内容顶部显示现有绘制内容。        |
399| destination-in   | 在新绘制内容中显示现有绘制内容。         |
400| destination-out  | 在新绘制内容外显示现有绘制内容。         |
401| lighter          | 显示新绘制内容和现有绘制内容。          |
402| copy             | 显示新绘制内容而忽略现有绘制内容。        |
403| xor              | 使用异或操作对新绘制内容与现有绘制内容进行融合。 |
404
405**示例:**
406
407```html
408<!-- xxx.hml -->
409<div>
410  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
411</div>
412```
413
414  ```js
415// xxx.js
416export default {
417  onShow() {
418    const el = this.$refs.canvas;
419    const ctx = el.getContext('2d');
420    ctx.fillStyle = 'rgb(255,0,0)';
421    ctx.fillRect(20, 20, 50, 50);
422    ctx.globalCompositeOperation = 'source-over';
423    ctx.fillStyle = 'rgb(0,0,255)';
424    ctx.fillRect(50, 50, 50, 50);
425    // Start drawing second example
426    ctx.fillStyle = 'rgb(255,0,0)';
427    ctx.fillRect(120, 20, 50, 50);
428    ctx.globalCompositeOperation = 'destination-over';
429    ctx.fillStyle = 'rgb(0,0,255)';
430    ctx.fillRect(150, 50, 50, 50);
431  }
432}
433  ```
434
435  ![zh-cn_image_0000001213192781](figures/zh-cn_image_0000001213192781.png)
436
437  示例中,新绘制内容是蓝色矩形,现有绘制内容是红色矩形。
438
439### shadowBlur
440
441  ```html
442<!-- xxx.hml -->
443<div>
444  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
445</div>
446  ```
447
448```js
449// xxx.js
450export default {
451  onShow() {
452    const el = this.$refs.canvas;
453    const ctx = el.getContext('2d');
454    ctx.shadowBlur = 30;
455    ctx.shadowColor = 'rgb(0,0,0)';
456    ctx.fillStyle = 'rgb(255,0,0)';
457    ctx.fillRect(20, 20, 100, 80);
458  }
459}
460```
461
462![zh-cn_image_0000001168111514](figures/zh-cn_image_0000001168111514.png)
463
464### shadowColor
465
466```html
467<!-- xxx.hml -->
468<div>
469  <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
470</div>
471```
472
473```js
474// xxx.js
475export default {
476  onShow() {
477    const el = this.$refs.canvas;
478    const ctx = el.getContext('2d');
479    ctx.shadowBlur = 30;
480    ctx.shadowColor = 'rgb(0,0,255)';
481    ctx.fillStyle = 'rgb(255,0,0)';
482    ctx.fillRect(30, 30, 100, 100);
483  }
484}
485```
486
487![zh-cn_image_0000001168111610](figures/zh-cn_image_0000001168111610.png)
488
489### shadowOffsetX
490
491```html
492<!-- xxx.hml -->
493<div>
494  <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
495</div>
496```
497
498```js
499// xxx.js
500export default {
501  onShow() {
502    const el = this.$refs.canvas;
503    const ctx = el.getContext('2d');
504    ctx.shadowBlur = 10;
505    ctx.shadowOffsetX = 20;
506    ctx.shadowColor = 'rgb(0,0,0)';
507    ctx.fillStyle = 'rgb(255,0,0)';
508    ctx.fillRect(20, 20, 100, 80);
509  }
510}
511```
512
513
514![zh-cn_image_0000001167631876](figures/zh-cn_image_0000001167631876.png)
515
516### shadowOffsetY
517
518```html
519<!-- xxx.hml -->
520<div>
521  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
522</div>
523```
524
525```js
526// xxx.js
527export default {
528  onShow() {
529    const el = this.$refs.canvas;
530    const ctx = el.getContext('2d');
531    ctx.shadowBlur = 10;
532    ctx.shadowOffsetY = 20;
533    ctx.shadowColor = 'rgb(0,0,0)';
534    ctx.fillStyle = 'rgb(255,0,0)';
535    ctx.fillRect(30, 30, 100, 100);
536 }
537}
538```
539
540![zh-cn_image_0000001213193285](figures/zh-cn_image_0000001213193285.png)
541
542### imageSmoothingEnabled<sup>6+</sup>
543
544```html
545<!-- xxx.hml -->
546<div>
547  <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
548</div>
549```
550
551```js
552// xxx.js
553export default {
554  onShow() {
555    const el = this.$refs.canvas;
556    const ctx = el.getContext('2d');
557    var img = new Image();
558    // 'common/image/example.jpg'需要替换为开发者所需的图像资源文件
559    img.src = 'common/image/example.jpg';
560    img.onload = function() {
561    ctx.imageSmoothingEnabled = false;
562    ctx.drawImage(img, 0, 0, 400, 200);
563    };
564  }
565}
566```
567
568![zh-cn_image_0000001167952236](figures/zh-cn_image_0000001167952236.png)
569
570
571
572## 方法
573
574### fillRect
575
576fillRect(x: number, y: number, width:number, height: number): void
577
578填充一个矩形。
579
580**系统能力:** SystemCapability.ArkUI.ArkUI.Full
581
582**参数:**
583
584| 参数名 | 类型    | 必填 | 说明                         |
585| ------ | ------- | ---- | ---------------------------- |
586| x      | number | 是 | 指定矩形左上角点的x坐标。 |
587| y      | number | 是 | 指定矩形左上角点的y坐标。 |
588| width  | number | 是 | 指定矩形的宽度。      |
589| height | number | 是 | 指定矩形的高度。      |
590
591**示例:**
592
593```html
594  <!-- xxx.hml -->
595  <div>
596    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
597  </div>
598```
599
600  ```js
601  //xxx.js
602  export default {
603    onShow() {
604      const el = this.$refs.canvas;
605      const ctx = el.getContext('2d');
606      ctx.fillRect(20, 20, 200, 150);
607    }
608  }
609  ```
610
611  ![zh-cn_image_0000001214811029](figures/zh-cn_image_0000001214811029.png)
612
613### clearRect
614
615clearRect(x: number, y: number, width:number, height: number): void
616
617删除指定区域内的绘制内容。
618
619**系统能力:** SystemCapability.ArkUI.ArkUI.Full
620
621**参数:**
622
623| 参数名 | 类型    | 必填 | 说明                         |
624| ------ | ------- | ---- | ---------------------------- |
625| x      | number | 是 | 指定矩形上的左上角x坐标。 |
626| y      | number | 是 | 指定矩形上的左上角y坐标。 |
627| width  | number | 是 | 指定矩形的宽度。      |
628| height | number | 是 | 指定矩形的高度。      |
629
630**示例:**
631  ```html
632  <!-- xxx.hml -->
633  <div>
634    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
635  </div>
636  ```
637
638  ```js
639  //xxx.js
640  export default {
641    onShow() {
642      const el = this.$refs.canvas;
643      const ctx = el.getContext('2d');
644      ctx.fillStyle = 'rgb(0,0,255)';
645      ctx.fillRect(0, 0, 400, 200);
646      ctx.clearRect(20, 20, 150, 100);
647    }
648  }
649  ```
650
651  ![zh-cn_image_0000001214619417](figures/zh-cn_image_0000001214619417.png)
652
653
654### strokeRect
655
656strokeRect(x: number, y: number, width:number, height: number): void
657
658绘制具有边框的矩形,矩形内部不填充。
659
660**系统能力:** SystemCapability.ArkUI.ArkUI.Full
661
662**参数:**
663
664| 参数名 | 类型    | 必填 | 说明                         |
665| ------ | ------- | ---- | ---------------------------- |
666| x      | number | 是 | 指定矩形的左上角x坐标。 |
667| y      | number | 是 | 指定矩形的左上角y坐标。 |
668| width  | number | 是 | 指定矩形的宽度。     |
669| height | number | 是 | 指定矩形的高度。     |
670
671**示例:**
672  ```html
673  <!-- xxx.hml -->
674  <div>
675    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
676  </div>
677  ```
678
679  ```js
680  //xxx.js
681  export default {
682    onShow() {
683      const el = this.$refs.canvas;
684      const ctx = el.getContext('2d');
685      ctx.strokeRect(30, 30, 200, 150);
686    }
687  }
688  ```
689
690  ![zh-cn_image_0000001214822091](figures/zh-cn_image_0000001214822091.png)
691
692
693### fillText
694
695fillText(text: string, x: number, y: number): void
696
697绘制填充类文本。
698
699**系统能力:** SystemCapability.ArkUI.ArkUI.Full
700
701**参数:**
702
703| 参数名 | 类型    | 必填 | 说明                         |
704| ------ | ------- | ---- | ---------------------------- |
705| text | string | 是 | 需要绘制的文本内容。      |
706| x    | number | 是 | 需要绘制的文本的左下角x坐标。 |
707| y    | number | 是 | 需要绘制的文本的左下角y坐标。 |
708
709**示例:**
710  ```html
711  <!-- xxx.hml -->
712  <div>
713    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
714  </div>
715  ```
716
717  ```js
718  //xxx.js
719  export default {
720    onShow() {
721      const el = this.$refs.canvas;
722      const ctx = el.getContext('2d');
723      ctx.font = '35px sans-serif';
724      ctx.fillText("Hello World!", 10, 60);
725    }
726  }
727  ```
728
729  ![zh-cn_image_0000001214469787](figures/zh-cn_image_0000001214469787.png)
730
731### strokeText
732
733strokeText(text: string, x: number, y: number): void
734
735绘制描边类文本。
736
737**系统能力:** SystemCapability.ArkUI.ArkUI.Full
738
739**参数:**
740
741| 参数名 | 类型    | 必填 | 说明                         |
742| ------ | ------- | ---- | ---------------------------- |
743| text | string | 是 | 需要绘制的文本内容。      |
744| x    | number | 是 | 需要绘制的文本的左下角x坐标。 |
745| y    | number | 是 | 需要绘制的文本的左下角y坐标。 |
746
747**示例:**
748  ```html
749  <!-- xxx.hml -->
750  <div>
751    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
752  </div>
753  ```
754
755  ```js
756  //xxx.js
757  export default {
758    onShow() {
759      const el = this.$refs.canvas;
760      const ctx = el.getContext('2d');
761      ctx.font = '25px sans-serif';
762      ctx.strokeText("Hello World!", 10, 60);
763    }
764  }
765  ```
766
767  ![zh-cn_image_0000001214460669](figures/zh-cn_image_0000001214460669.png)
768
769### measureText
770
771measureText(text: string): TextMetrics
772
773该方法返回一个文本测算的对象,通过该对象可以获取指定文本的宽度值。
774
775**系统能力:** SystemCapability.ArkUI.ArkUI.Full
776
777**参数:**
778
779| 参数名 | 类型    | 必填 | 说明                         |
780| ------ | ------- | ---- | ---------------------------- |
781| text | string | 是 | 需要进行测量的文本。 |
782
783**返回值:**
784
785| 类型          | 说明                                     |
786| ----------- | -------------------------------------- |
787| TextMetrics | 包含指定字体的宽度,该宽度可以通过TextMetrics.width来获取。 |
788
789**示例:**
790  ```html
791  <!-- xxx.hml -->
792  <div>
793    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
794  </div>
795  ```
796
797  ```js
798  //xxx.js
799  export default {
800    onShow() {
801      const el = this.$refs.canvas;
802      const ctx = el.getContext('2d');
803      ctx.font = '20px sans-serif';
804      var txt = 'Hello World';
805      ctx.fillText("width:" + ctx.measureText(txt).width, 20, 60);
806      ctx.fillText(txt, 20, 110);
807    }
808  }
809  ```
810
811  ![zh-cn_image_0000001169142476](figures/zh-cn_image_0000001169142476.png)
812
813
814### stroke
815stroke(): void
816
817进行边框绘制操作。
818
819**系统能力:** SystemCapability.ArkUI.ArkUI.Full
820
821**示例:**
822  ```html
823  <!-- xxx.hml -->
824  <div>
825    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
826  </div>
827  ```
828
829  ```js
830  //xxx.js
831  export default {
832    onShow() {
833      const el = this.$refs.canvas;
834      const ctx = el.getContext('2d');
835      ctx.moveTo(25, 25);
836      ctx.lineTo(25, 250);
837      ctx.lineWidth = '6';
838      ctx.strokeStyle = 'rgb(0,0,255)';
839      ctx.stroke();
840    }
841  }
842  ```
843
844  ![zh-cn_image_0000001236697937](figures/zh-cn_image_0000001236697937.png)
845
846
847### beginPath
848beginPath(): void
849
850创建一个新的绘制路径。
851
852**系统能力:** SystemCapability.ArkUI.ArkUI.Full
853
854**示例:**
855  ```html
856  <!-- xxx.hml -->
857  <div>
858    <canvas ref="canvas" style="width: 500px; height: 500px; "></canvas>
859  </div>
860  ```
861
862  ```js
863  //xxx.js
864  export default {
865    onShow() {
866      const el = this.$refs.canvas;
867      const ctx = el.getContext('2d');
868      ctx.beginPath();
869      ctx.lineWidth = '6';
870      ctx.strokeStyle = '#0000ff';
871      ctx.moveTo(15, 80);
872      ctx.lineTo(280, 80);
873      ctx.stroke();
874    }
875  }
876  ```
877
878  ![zh-cn_image_0000001214629745](figures/zh-cn_image_0000001214629745.png)
879
880
881### moveTo
882moveTo(x: number, y: number): void
883
884路径从当前点移动到指定点。
885
886**系统能力:** SystemCapability.ArkUI.ArkUI.Full
887
888**参数:**
889
890| 参数名 | 类型    | 必填 | 说明                         |
891| ------ | ------- | ---- | ---------------------------- |
892| x    | number | 是 | 指定位置的x坐标。<br>单位:vp |
893| y    | number | 是 | 指定位置的y坐标。<br>单位:vp |
894
895**示例:**
896  ```html
897  <!-- xxx.hml -->
898  <div>
899    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
900  </div>
901  ```
902
903  ```js
904  //xxx.js
905  export default {
906    onShow() {
907      const el = this.$refs.canvas;
908      const ctx = el.getContext('2d');
909      ctx.beginPath();
910      ctx.moveTo(10, 10);
911      ctx.lineTo(280, 160);
912      ctx.stroke();
913    }
914  }
915  ```
916
917  ![zh-cn_image_0000001169309948](figures/zh-cn_image_0000001169309948.png)
918
919
920### lineTo
921lineTo(x: number, y: number): void
922
923从当前点到指定点进行路径连接。
924
925**系统能力:** SystemCapability.ArkUI.ArkUI.Full
926
927**参数:**
928
929| 参数名 | 类型    | 必填 | 说明                         |
930| ------ | ------- | ---- | ---------------------------- |
931| x    | number | 是 | 指定位置的x坐标。<br>单位:vp |
932| y    | number | 是 | 指定位置的y坐标。<br>单位:vp |
933
934**示例:**
935  ```html
936  <!-- xxx.hml -->
937  <div>
938    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
939  </div>
940  ```
941
942  ```js
943  //xxx.js
944  export default {
945    onShow() {
946      const el = this.$refs.canvas;
947      const ctx = el.getContext('2d');
948      ctx.beginPath();
949      ctx.moveTo(10, 10);
950      ctx.lineTo(280, 160);
951      ctx.stroke();
952    }
953  }
954  ```
955
956  ![zh-cn_image_0000001169469914](figures/zh-cn_image_0000001169469914.png)
957
958
959### closePath
960closePath(): void
961
962结束当前路径形成一个封闭路径。
963
964**系统能力:** SystemCapability.ArkUI.ArkUI.Full
965
966**示例:**
967  ```html
968  <!-- xxx.hml -->
969  <div>
970    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
971  </div>
972  ```
973
974  ```js
975  //xxx.js
976  export default {
977    onShow() {
978      const el = this.$refs.canvas;
979      const ctx = el.getContext('2d');
980      ctx.beginPath();
981      ctx.moveTo(30, 30);
982      ctx.lineTo(110, 30);
983      ctx.lineTo(70, 90);
984      ctx.closePath();
985      ctx.stroke();
986    }
987  }
988  ```
989
990  ![zh-cn_image_0000001169151508](figures/zh-cn_image_0000001169151508.png)
991
992### createPattern
993
994createPattern(image: Image, repetition: string): Object
995
996通过指定图像和重复方式创建图片填充的模板。
997
998**系统能力:** SystemCapability.ArkUI.ArkUI.Full
999
1000**参数:**
1001
1002| 参数名 | 类型    | 必填 | 说明                         |
1003| ------ | ------- | ---- | ---------------------------- |
1004| image      | Image  | 是 | 图源对象,具体参考[Image对象](js-components-canvas-image.md)。 |
1005| repetition | string | 是 | 设置图像重复的方式,取值为:'repeat'、'repeat-x'、&nbsp;'repeat-y'、'no-repeat'。 |
1006
1007**返回值:**
1008
1009| 类型     | 说明                |
1010| ------ | ----------------- |
1011| Object | 指定图像填充的Pattern对象。 |
1012
1013**示例:**
1014  ```html
1015  <!-- xxx.hml -->
1016  <div>
1017    <canvas ref="canvas" style="width: 1000px; height: 1000px;"></canvas>
1018  </div>
1019  ```
1020
1021  ```js
1022  //xxx.js
1023  export default {
1024    onShow() {
1025      const el = this.$refs.canvas;
1026      const ctx = el.getContext('2d');
1027      var img = new Image();
1028      // 'common/images/example.jpg'需要替换为开发者所需的图像资源文件
1029      img.src = 'common/images/example.jpg';
1030      var pat = ctx.createPattern(img, 'repeat');
1031      ctx.fillStyle = pat;
1032      ctx.fillRect(0, 0, 500, 500);
1033    }
1034  }
1035  ```
1036
1037  ![zh-cn_image_0000001169301188](figures/zh-cn_image_0000001169301188.png)
1038
1039### bezierCurveTo
1040
1041bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void
1042
1043创建三次贝赛尔曲线的路径。
1044
1045**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1046
1047**参数:**
1048
1049| 参数名 | 类型    | 必填 | 说明                         |
1050| ------ | ------- | ---- | ---------------------------- |
1051| cp1x | number | 是 | 第一个贝塞尔参数的x坐标值。 |
1052| cp1y | number | 是 | 第一个贝塞尔参数的y坐标值。 |
1053| cp2x | number | 是 | 第二个贝塞尔参数的x坐标值。 |
1054| cp2y | number | 是 | 第二个贝塞尔参数的y坐标值。 |
1055| x    | number | 是 | 路径结束时的x坐标值。    |
1056| y    | number | 是 | 路径结束时的y坐标值。    |
1057
1058**示例:**
1059  ```html
1060  <!-- xxx.hml -->
1061  <div>
1062    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1063  </div>
1064  ```
1065
1066  ```js
1067  //xxx.js
1068  export default {
1069    onShow() {
1070      const el = this.$refs.canvas;
1071      const ctx = el.getContext('2d');
1072      ctx.beginPath();
1073      ctx.moveTo(10, 10);
1074      ctx.bezierCurveTo(20, 100, 200, 100, 200, 20);
1075      ctx.stroke();
1076    }
1077  }
1078  ```
1079
1080  ![zh-cn_image_0000001214621177](figures/zh-cn_image_0000001214621177.png)
1081
1082### quadraticCurveTo
1083
1084quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void
1085
1086创建二次贝赛尔曲线的路径。
1087
1088**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1089
1090**参数:**
1091
1092| 参数名 | 类型    | 必填 | 说明                         |
1093| ------ | ------- | ---- | ---------------------------- |
1094| cpx  | number | 是 | 贝塞尔参数的x坐标值。 |
1095| cpy  | number | 是 | 贝塞尔参数的y坐标值。 |
1096| x    | number | 是 | 路径结束时的x坐标值。 |
1097| y    | number | 是 | 路径结束时的y坐标值。 |
1098
1099**示例:**
1100  ```html
1101  <!-- xxx.hml -->
1102  <div>
1103    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
1104  </div>
1105  ```
1106
1107  ```js
1108  //xxx.js
1109  export default {
1110    onShow() {
1111      const el = this.$refs.canvas;
1112      const ctx = el.getContext('2d');
1113      ctx.beginPath();
1114      ctx.moveTo(20, 20);
1115      ctx.quadraticCurveTo(100, 100, 200, 20);
1116      ctx.stroke();
1117    }
1118  }
1119  ```
1120
1121  ![zh-cn_image_0000001169461910](figures/zh-cn_image_0000001169461910.png)
1122
1123
1124### arc
1125arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void
1126
1127绘制弧线路径。
1128
1129**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1130
1131**参数:**
1132
1133| 参数名 | 类型    | 必填 | 说明                         |
1134| ------ | ------- | ---- | ---------------------------- |
1135| x             | number  | 是 | 弧线圆心的x坐标值。 |
1136| y             | number  | 是 | 弧线圆心的y坐标值。 |
1137| radius        | number  | 是 | 弧线的圆半径。    |
1138| startAngle    | number  | 是 | 弧线的起始弧度。   |
1139| endAngle      | number  | 是 | 弧线的终止弧度。   |
1140| anticlockwise | boolean | 否 | 是否逆时针绘制圆弧,true为逆时针,false为顺时针。<br/>默认值:false  |
1141
1142**示例:**
1143  ```html
1144  <!-- xxx.hml -->
1145  <div>
1146    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1147  </div>
1148  ```
1149
1150  ```js
1151  //xxx.js
1152  export default {
1153    onShow() {
1154      const el = this.$refs.canvas;
1155      const ctx = el.getContext('2d');
1156      ctx.beginPath();
1157      ctx.arc(100, 75, 50, 0, 6.28);
1158      ctx.stroke();
1159    }
1160  }
1161  ```
1162
1163  ![zh-cn_image_0000001169470288](figures/zh-cn_image_0000001169470288.png)
1164
1165### arcTo
1166
1167arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void
1168
1169依据圆弧经过的点和圆弧半径创建圆弧路径。
1170
1171**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1172
1173**参数:**
1174
1175| 参数名 | 类型    | 必填 | 说明                         |
1176| ------ | ------- | ---- | ---------------------------- |
1177| x1     | number | 是 | 圆弧经过的第一个点的x坐标值。 |
1178| y1     | number | 是 | 圆弧经过的第一个点的y坐标值。 |
1179| x2     | number | 是 | 圆弧经过的第二个点的x坐标值。 |
1180| y2     | number | 是 | 圆弧经过的第二个点的y坐标值。 |
1181| radius | number | 是 | 圆弧的圆半径值。        |
1182
1183**示例:**
1184  ```html
1185  <!-- xxx.hml -->
1186  <div>
1187    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1188  </div>
1189  ```
1190
1191  ```js
1192  //xxx.js
1193  export default {
1194    onShow() {
1195      const el = this.$refs.canvas;
1196      const ctx = el.getContext('2d');
1197      ctx.moveTo(100, 20);
1198      ctx.arcTo(150, 20, 150, 70, 50); // Create an arc
1199      ctx.stroke();
1200    }
1201  }
1202  ```
1203
1204  ![zh-cn_image_0000001169143586](figures/zh-cn_image_0000001169143586.png)
1205
1206### ellipse<sup>6+</sup>
1207
1208ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: number): void
1209
1210在规定的矩形区域绘制一个椭圆。
1211
1212**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1213
1214**参数:**
1215
1216| 参数名 | 类型    | 必填 | 说明                         |
1217| ------ | ------- | ---- | ---------------------------- |
1218| x             | number | 是 | 椭圆圆心的x轴坐标。                           |
1219| y             | number | 是 | 椭圆圆心的y轴坐标。                           |
1220| radiusX       | number | 是 | 椭圆x轴的半径长度。                           |
1221| radiusY       | number | 是 | 椭圆y轴的半径长度。                           |
1222| rotation      | number | 是 | 椭圆的旋转角度,单位为弧度。                       |
1223| startAngle    | number | 是 | 椭圆绘制的起始点角度,以弧度表示。                    |
1224| endAngle      | number | 是 | 椭圆绘制的结束点角度,以弧度表示。                    |
1225| anticlockwise | number | 否 | 是否以逆时针方向绘制椭圆,0为顺时针,1为逆时针。其它数值均按默认值处理。<br/>默认值:0 |
1226
1227**示例:**
1228  ```html
1229  <!-- xxx.hml -->
1230  <div>
1231    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
1232  </div>
1233  ```
1234
1235  ```js
1236  //xxx.js
1237  export default {
1238    onShow() {
1239      const el = this.$refs.canvas;
1240      const ctx = el.getContext('2d');
1241      ctx.beginPath();
1242      ctx.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI, 1);
1243      ctx.stroke();
1244    }
1245  }
1246  ```
1247
1248  ![zh-cn_image_0000001214823665](figures/zh-cn_image_0000001214823665.png)
1249
1250
1251### rect
1252rect(x: number, y: number, width: number, height: number): void
1253
1254创建矩形路径。
1255
1256**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1257
1258**参数:**
1259
1260| 参数名 | 类型    | 必填 | 说明                         |
1261| ------ | ------- | ---- | ---------------------------- |
1262| x      | number | 是 | 指定矩形的左上角x坐标值。 |
1263| y      | number | 是 | 指定矩形的左上角y坐标值。 |
1264| width  | number | 是 | 指定矩形的宽度。      |
1265| height | number | 是 | 指定矩形的高度。      |
1266
1267**示例:**
1268  ```html
1269  <!-- xxx.hml -->
1270  <div>
1271    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
1272  </div>
1273  ```
1274
1275  ```js
1276  //xxx.js
1277  export default {
1278    onShow() {
1279      const el = this.$refs.canvas;
1280      const ctx = el.getContext('2d');
1281      ctx.rect(20, 20, 100, 100); // Create a 100*100 rectangle at (20, 20)
1282      ctx.stroke(); // Draw it
1283    }
1284  }
1285  ```
1286
1287  ![zh-cn_image_0000001214630783](figures/zh-cn_image_0000001214630783.png)
1288
1289### fill
1290
1291fill(): void
1292
1293对封闭路径进行填充。
1294
1295**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1296
1297**示例:**
1298  ```html
1299  <!-- xxx.hml -->
1300  <div>
1301    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1302  </div>
1303  ```
1304
1305  ```js
1306  //xxx.js
1307  export default {
1308    onShow() {
1309      const el = this.$refs.canvas;
1310      const ctx = el.getContext('2d');
1311      ctx.rect(20, 20, 100, 100); // Create a 100*100 rectangle at (20, 20)
1312      ctx.fill(); // Draw it in default setting
1313    }
1314  }
1315  ```
1316
1317  ![zh-cn_image_0000001214703717](figures/zh-cn_image_0000001214703717.png)
1318
1319### clip
1320
1321clip(): void
1322
1323设置当前路径为剪切路径。
1324
1325**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1326
1327**示例:**
1328  ```html
1329  <!-- xxx.hml -->
1330  <div>
1331    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1332  </div>
1333  ```
1334
1335  ```js
1336  //xxx.js
1337  export default {
1338    onShow() {
1339      const el = this.$refs.canvas;
1340      const ctx = el.getContext('2d');
1341      ctx.rect(0, 0, 200, 200);
1342      ctx.stroke();
1343      ctx.clip();
1344      // Draw red rectangle after clip
1345      ctx.fillStyle = "rgb(255,0,0)";
1346      ctx.fillRect(0, 0, 150, 150);
1347    }
1348  }
1349  ```
1350
1351  ![zh-cn_image_0000001169303414](figures/zh-cn_image_0000001169303414.png)
1352
1353### rotate
1354
1355rotate(rotate: number): void
1356
1357针对当前坐标轴进行顺时针旋转。
1358
1359**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1360
1361**参数:**
1362
1363| 参数名 | 类型    | 必填 | 说明                         |
1364| ------ | ------- | ---- | ---------------------------- |
1365| rotate | number | 是 | 设置顺时针旋转的弧度值,可以通过Math.PI&nbsp;/&nbsp;180将角度转换为弧度值。 |
1366
1367**示例:**
1368  ```html
1369  <!-- xxx.hml -->
1370  <div>
1371    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1372  </div>
1373  ```
1374
1375  ```js
1376  //xxx.js
1377  export default {
1378    onShow() {
1379      const el = this.$refs.canvas;
1380      const ctx = el.getContext('2d');
1381      ctx.rotate(45 * Math.PI / 180); // Rotate the rectangle 45 degrees
1382      ctx.fillRect(70, 20, 50, 50);
1383    }
1384  }
1385  ```
1386
1387  ![zh-cn_image_0000001169463368](figures/zh-cn_image_0000001169463368.png)
1388
1389### scale
1390
1391scale(x: number, y: number): void
1392
1393设置canvas画布的缩放变换属性,后续的绘制操作将按照缩放比例进行缩放。
1394
1395**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1396
1397**参数:**
1398
1399| 参数名 | 类型    | 必填 | 说明                         |
1400| ------ | ------- | ---- | ---------------------------- |
1401| x    | number | 是 | 设置水平方向的缩放值。 |
1402| y    | number | 是 | 设置垂直方向的缩放值。 |
1403
1404**示例:**
1405  ```html
1406  <!-- xxx.hml -->
1407  <div>
1408    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1409  </div>
1410  ```
1411
1412  ```js
1413  //xxx.js
1414  export default {
1415    onShow() {
1416      const el = this.$refs.canvas;
1417      const ctx = el.getContext('2d');
1418      ctx.strokeRect(10, 10, 25, 25);
1419      ctx.scale(2, 2);// Scale to 200%
1420      ctx.strokeRect(10, 10, 25, 25);
1421    }
1422  }
1423  ```
1424
1425  ![zh-cn_image_0000001214463281](figures/zh-cn_image_0000001214463281.png)
1426
1427### transform
1428
1429transform(scaleX: number, skewX: number, skewY: number, scale: number, translateX: number, translateY: number): void
1430
1431transform方法对应一个变换矩阵,想对一个图形进行变化的时候,只要设置此变换矩阵相应的参数,对图形的各个定点的坐标分别乘以这个矩阵,就能得到新的定点的坐标。矩阵变换效果可叠加。
1432
1433>  **说明:**
1434>  变换后的坐标计算方式(x和y为变换前坐标,x'和y'为变换后坐标):
1435>
1436>  - x' = scaleX \* x + skewY \* y + translateX
1437>
1438>  - y' = skewX \* x + scaleY \* y + translateY
1439
1440**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1441
1442**参数:**
1443
1444| 参数名 | 类型    | 必填 | 说明                         |
1445| ------ | ------- | ---- | ---------------------------- |
1446| scaleX     | number | 是 | 指定水平缩放值。 |
1447| skewX      | number | 是 | 指定水平倾斜值。 |
1448| skewY      | number | 是 | 指定垂直倾斜值。 |
1449| scaleY     | number | 是 | 指定垂直缩放值。 |
1450| translateX | number | 是 | 指定水平移动值。 |
1451| translateY | number | 是 | 指定垂直移动值。 |
1452
1453**示例:**
1454  ```html
1455  <!-- xxx.hml -->
1456  <div>
1457    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1458  </div>
1459  ```
1460
1461  ```js
1462  //xxx.js
1463  export default {
1464    onShow() {
1465      const el = this.$refs.canvas;
1466      const ctx = el.getContext('2d');
1467      ctx.fillStyle = 'rgb(0,0,0)';
1468      ctx.fillRect(0, 0, 100, 100);
1469      ctx.transform(1, 0.5, -0.5, 1, 10, 10);
1470      ctx.fillStyle = 'rgb(255,0,0)';
1471      ctx.fillRect(0, 0, 100, 100);
1472      ctx.transform(1, 0.5, -0.5, 1, 10, 10);
1473      ctx.fillStyle = 'rgb(0,0,255)';
1474      ctx.fillRect(0, 0, 100, 100);
1475    }
1476  }
1477  ```
1478
1479  ![zh-cn_image_0000001214623227](figures/zh-cn_image_0000001214623227.png)
1480
1481### setTransform
1482
1483setTransform(scaleX: number, skewX: number, skewY: number, scale: number, translateX: number, translateY: number): void
1484
1485setTransform方法使用的参数和transform()方法相同,但setTransform()方法会重置现有的变换矩阵并创建新的变换矩阵。
1486
1487**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1488
1489**参数:**
1490
1491| 参数名 | 类型    | 必填 | 说明                         |
1492| ------ | ------- | ---- | ---------------------------- |
1493| scaleX     | number | 是 | 指定水平缩放值。 |
1494| skewX      | number | 是 | 指定水平倾斜值。 |
1495| skewY      | number | 是 | 指定垂直倾斜值。 |
1496| scaleY     | number | 是 | 指定垂直缩放值。 |
1497| translateX | number | 是 | 指定水平移动值。 |
1498| translateY | number | 是 | 指定垂直移动值。 |
1499
1500**示例:**
1501  ```html
1502  <!-- xxx.hml -->
1503  <div>
1504    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1505  </div>
1506  ```
1507
1508  ```js
1509  //xxx.js
1510  export default {
1511    onShow() {
1512      const el = this.$refs.canvas;
1513      const ctx = el.getContext('2d');
1514      ctx.fillStyle = 'rgb(255,0,0)';
1515      ctx.fillRect(0, 0, 100, 100);
1516      ctx.setTransform(1,0.5, -0.5, 1, 10, 10);
1517      ctx.fillStyle = 'rgb(0,0,255)';
1518      ctx.fillRect(0, 0, 100, 100);
1519    }
1520  }
1521  ```
1522
1523  ![zh-cn_image_0000001168984880](figures/zh-cn_image_0000001168984880.png)
1524
1525### translate
1526
1527translate(x: number, y: number): void
1528
1529移动当前坐标系的原点。
1530
1531**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1532
1533**参数:**
1534
1535| 参数名 | 类型    | 必填 | 说明                         |
1536| ------ | ------- | ---- | ---------------------------- |
1537| x    | number | 是 | 设置水平平移量。 |
1538| y    | number | 是 | 设置竖直平移量。 |
1539
1540**示例:**
1541  ```html
1542  <!-- xxx.hml -->
1543  <div>
1544    <canvas ref="canvas" style="width: 200px; height: 150px;"></canvas>
1545  </div>
1546  ```
1547
1548  ```js
1549  //xxx.js
1550  export default {
1551    onShow() {
1552      const el = this.$refs.canvas;
1553      const ctx = el.getContext('2d');
1554      ctx.fillRect(10, 10, 50, 50);
1555      ctx.translate(70, 70);
1556      ctx.fillRect(10, 10, 50, 50);
1557    }
1558  }
1559  ```
1560
1561  ![zh-cn_image_0000001169144864](figures/zh-cn_image_0000001169144864.png)
1562
1563### createPath2D<sup>6+</sup>
1564
1565createPath2D(path: Path2D, cmds: string): Path2D
1566
1567创建一个Path2D对象。
1568
1569**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1570
1571**参数:**
1572
1573| 参数名 | 类型    | 必填 | 说明                         |
1574| ------ | ------- | ---- | ---------------------------- |
1575| path | Path2D | 是 | Path2D对象。      |
1576| cmds | string | 是 | SVG的Path描述字符串。 |
1577
1578**返回值:**
1579
1580  [Path2D对象](js-components-canvas-path2d.md)
1581
1582**示例:**
1583  ```html
1584  <!-- xxx.hml -->
1585  <div>
1586    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
1587  </div>
1588  ```
1589
1590  ```js
1591  //xxx.js
1592  export default {
1593    onShow() {
1594      const el = this.$refs.canvas;
1595      const ctx = el.getContext('2d');
1596      var path1 = ctx.createPath2D();
1597      path1.moveTo(100, 100);
1598      path1.lineTo(200, 100);
1599      path1.lineTo(100, 200);
1600      path1.closePath();
1601      ctx.stroke(path1);
1602      var path2 = ctx.createPath2D("M150 150 L50 250 L250 250 Z");
1603      ctx.stroke(path2);
1604      var path3 = ctx.createPath2D(path2);
1605      ctx.stroke(path3);
1606    }
1607  }
1608  ```
1609
1610  ![zh-cn_image_0000001214824709](figures/zh-cn_image_0000001214824709.png)
1611
1612### drawImage
1613
1614drawImage(image: Image | PixelMap, sx: number, sy: number, sWidth: number, sHeight: number, dx: number, dy: number, dWidth: number, dHeight: number):void
1615
1616进行图像绘制。
1617
1618**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1619
1620**参数:**
1621
1622| 参数名 | 类型    | 必填 | 说明                         |
1623| ------ | ------- | ---- | ---------------------------- |
1624| image   | Image \| PixelMap<sup>9+</sup> | 是 | 图片资源,请参考[Image对象](js-components-canvas-image.md) 或[PixelMap对象](../../apis-image-kit/arkts-apis-image-PixelMap.md)。 |
1625| sx      | number                         | 是 | 裁切源图像时距离源图像左上角的x坐标值。                     |
1626| sy      | number                         | 是 | 裁切源图像时距离源图像左上角的y坐标值。                     |
1627| sWidth  | number                         | 是 | 裁切源图像时需要裁切的宽度。                           |
1628| sHeight | number                         | 是 | 裁切源图像时需要裁切的高度。                           |
1629| dx      | number                         | 是 | 绘制区域左上角在x轴的位置。                           |
1630| dy      | number                         | 是 | 绘制区域左上角在y&nbsp;轴的位置。                     |
1631| dWidth  | number                         | 是 | 绘制区域的宽度。                                 |
1632| dHeight | number                         | 是 | 绘制区域的高度。                                 |
1633
1634**示例:**
1635  ```html
1636  <!-- xxx.hml -->
1637  <div>
1638    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
1639  </div>
1640  ```
1641
1642  ```js
1643  //xxx.js
1644  export default {
1645    onShow() {
1646      var test = this.$refs.canvas;
1647      var ctx = test.getContext('2d');
1648      var img = new Image();
1649      // 'common/image/test.jpg'需要替换为开发者所需的图像资源文件
1650      img.src = 'common/image/test.jpg';
1651      ctx.drawImage(img, 0, 0, 200, 200, 10, 10, 200, 200);
1652    }
1653  }
1654  ```
1655
1656  ![zh-cn_image_0000001214704759](figures/zh-cn_image_0000001214704759.png)
1657
1658### restore
1659
1660restore(): void
1661
1662对保存的绘图上下文进行恢复。
1663
1664**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1665
1666**示例:**
1667  ```html
1668  <!-- xxx.hml -->
1669  <div>
1670    <canvas ref="canvas" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
1671  </div>
1672  ```
1673
1674  ```js
1675  //xxx.js
1676  export default {
1677    onShow() {
1678      const el = this.$refs.canvas;
1679      const ctx = el.getContext('2d');
1680      ctx.restore();
1681    }
1682  }
1683  ```
1684
1685### save
1686
1687save(): void
1688
1689对当前的绘图上下文进行保存。
1690
1691**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1692
1693**示例:**
1694  ```html
1695  <!-- xxx.hml -->
1696  <div>
1697    <canvas ref="canvas" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
1698  </div>
1699  ```
1700
1701  ```js
1702  //xxx.js
1703  export default {
1704    onShow() {
1705      const el = this.$refs.canvas;
1706      const ctx = el.getContext('2d');
1707      ctx.save();
1708    }
1709  }
1710  ```
1711
1712### createLinearGradient<sup>6+</sup>
1713
1714createLinearGradient(x0: number, y0: number, x1: number, y1: number): Object
1715
1716创建一个线性渐变色,返回CanvasGradient对象,请参考[CanvasGradient对象](js-components-canvas-canvasgradient.md)。
1717
1718**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1719
1720**参数:**
1721
1722| 参数名 | 类型    | 必填 | 说明                         |
1723| ------ | ------- | ---- | ---------------------------- |
1724| x0   | number | 是 | 起点的x轴坐标。 |
1725| y0   | number | 是 | 起点的y轴坐标。 |
1726| x1   | number | 是 | 终点的x轴坐标。 |
1727| y1   | number | 是 | 终点的y轴坐标。 |
1728
1729**返回值:**
1730
1731| 类型     | 说明                     |
1732| ------ | ---------------------- |
1733| Object | 返回创建的CanvasGradient对象。 |
1734
1735**示例:**
1736  ```html
1737  <!-- xxx.hml -->
1738  <div>
1739    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
1740    <input type="button" style="width: 180px; height: 60px;" value="fillStyle" onclick="handleClick" />
1741  </div>
1742  ```
1743
1744  ```js
1745  // xxx.js
1746  export default {
1747    handleClick() {
1748      const el = this.$refs.canvas;
1749      const ctx = el.getContext('2d');
1750      // Linear gradient: start(50,0) end(300,100)
1751      var gradient = ctx.createLinearGradient(50,0, 300,100);
1752      // Add three color stops
1753      gradient.addColorStop(0.0, '#ff0000');
1754      gradient.addColorStop(0.5, '#ffffff');
1755      gradient.addColorStop(1.0, '#00ff00');
1756      // Set the fill style and draw a rectangle
1757      ctx.fillStyle = gradient;
1758      ctx.fillRect(0, 0, 500, 500);
1759    }
1760  }
1761  ```
1762
1763  ![zh-cn_image_0000001169303416](figures/zh-cn_image_0000001169303416.png)
1764
1765### createRadialGradient<sup>6+</sup>
1766
1767createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): Object
1768
1769创建一个径向渐变色,返回CanvasGradient对象,请参考CanvasGradient。
1770
1771**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1772
1773**参数:**
1774
1775| 参数名 | 类型    | 必填 | 说明                         |
1776| ------ | ------- | ---- | ---------------------------- |
1777| x0   | number | 是 | 起始圆的x轴坐标。         |
1778| y0   | number | 是 | 起始圆的y轴坐标。         |
1779| r0   | number | 是 | 起始圆的半径。必须是非负且有限的。 |
1780| x1   | number | 是 | 终点圆的x轴坐标。         |
1781| y1   | number | 是 | 终点圆的y轴坐标。         |
1782| r1   | number | 是 | 终点圆的半径。必须为非负且有限的。 |
1783
1784**返回值:**
1785
1786| 类型     | 说明                     |
1787| ------ | ---------------------- |
1788| Object | 返回创建的CanvasGradient对象。 |
1789
1790**示例:**
1791  ```html
1792  <!-- xxx.hml -->
1793  <div>
1794    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
1795    <input type="button" style="width: 180px; height: 60px;" value="fillStyle" onclick="handleClick" />
1796  </div>
1797  ```
1798
1799  ```js
1800  // xxx.js
1801  export default {
1802    handleClick() {
1803      const el = this.$refs.canvas;
1804      const ctx = el.getContext('2d');
1805      // Radial gradient: inner circle(200,200,r:50) outer circle(200,200,r:200)
1806      var gradient = ctx.createRadialGradient(200,200,50, 200,200,200);
1807      // Add three color stops
1808      gradient.addColorStop(0.0, '#ff0000');
1809      gradient.addColorStop(0.5, '#ffffff');
1810      gradient.addColorStop(1.0, '#00ff00');
1811      // Set the fill style and draw a rectangle
1812      ctx.fillStyle = gradient;
1813      ctx.fillRect(0, 0, 500, 500);
1814    }
1815  }
1816  ```
1817
1818  ![zh-cn_image_0000001169463370](figures/zh-cn_image_0000001169463370.png)
1819
1820### createImageData
1821
1822createImageData(width: number, height: number): ImageData
1823
1824创建新的ImageData对象,请参考[ImageData对象](js-components-canvas-imagedata.md)。
1825
1826**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1827
1828**参数:**
1829
1830| 参数名        | 类型     | 必填     | 说明                |
1831| --------- | ------ | ------ |----------------- |
1832| width     | number |  是 | ImageData的宽度。     |
1833| height    | number |  是 | ImageData的高度。     |
1834
1835**返回值:**
1836
1837| 类型     | 说明                |
1838| ------ | ----------------- |
1839| [ImageData](js-components-canvas-imagedata.md) | 返回创建的ImageData对象。 |
1840
1841**示例:**
1842  ```html
1843  <!-- xxx.hml -->
1844  <div>
1845    <canvas ref="canvas" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
1846  </div>
1847  ```
1848
1849  ```js
1850  //xxx.js
1851  export default {
1852    onShow() {
1853      const el = this.$refs.canvas;
1854      const ctx = el.getContext('2d');
1855      var imageData = ctx.createImageData(50, 100);  // Create ImageData with 50px width and 100px height
1856    }
1857  }
1858  ```
1859
1860### createImageData
1861
1862createImageData(imageData: ImageData): ImageData
1863
1864创建新的ImageData对象,请参考[ImageData对象](js-components-canvas-imagedata.md)。
1865
1866**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1867
1868**参数:**
1869
1870| 参数名        | 类型     | 必填     | 说明                |
1871| --------- | ------ | ------ |----------------- |
1872| imageData | [ImageData](js-components-canvas-imagedata.md) | 是 |复制现有的ImageData对象。 |
1873
1874**返回值:**
1875
1876| 类型     | 说明                |
1877| ------ | ----------------- |
1878| [ImageData](js-components-canvas-imagedata.md) | 返回创建的ImageData对象。 |
1879
1880**示例:**
1881  ```html
1882  <!-- xxx.hml -->
1883  <div>
1884    <canvas ref="canvas" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
1885  </div>
1886  ```
1887
1888  ```js
1889  //xxx.js
1890  export default {
1891    onShow() {
1892      const el = this.$refs.canvas;
1893      const ctx = el.getContext('2d');
1894      var imageData = ctx.createImageData(50, 100);  // Create ImageData with 50px width and 100px height
1895      var newImageData = ctx.createImageData(imageData);  // Create ImageData using the input imageData
1896    }
1897  }
1898  ```
1899
1900### getImageData
1901
1902getImageData(sx: number, sy: number, sw: number, sh: number): ImageData
1903
1904以当前canvas指定区域内的像素创建[ImageData对象](js-components-canvas-imagedata.md)。
1905
1906**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1907
1908**参数:**
1909
1910| 参数名 | 类型    | 必填 | 说明                         |
1911| ------ | ------- | ---- | ---------------------------- |
1912| sx   | number | 是 | 需要输出的区域的左上角x坐标。 |
1913| sy   | number | 是 | 需要输出的区域的左上角y坐标。 |
1914| sw   | number | 是 | 需要输出的区域的宽度。     |
1915| sh   | number | 是 | 需要输出的区域的高度。     |
1916
1917**返回值:**
1918
1919| 类型     | 说明                      |
1920| ------ | ----------------------- |
1921| [ImageData](js-components-canvas-imagedata.md) | 返回包含指定区域像素的ImageData对象。 |
1922
1923**示例:**
1924  ```html
1925  <!-- xxx.hml -->
1926  <div>
1927    <canvas id="getImageData" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
1928  </div>
1929  ```
1930
1931  ```js
1932  //xxx.js
1933  export default {
1934    onShow() {
1935      const test = this.$element('getImageData')
1936      const ctx = test.getContext('2d');
1937      var imageData = ctx.getImageData(0, 0, 280, 300);
1938    }
1939  }
1940  ```
1941
1942### putImageData
1943
1944putImageData(imageData: ImageData, dx: number, dy: number, dirtyX: number, dirtyY: number, dirtyWidth: number, dirtyHeight: number): void
1945
1946使用ImageData数据填充新的矩形区域。
1947
1948**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1949
1950**参数:**
1951
1952| 参数名 | 类型    | 必填 | 说明                         |
1953| ------ | ------- | ---- | ---------------------------- |
1954| imageData   | [ImageData](js-components-canvas-imagedata.md) | 是 | 包含像素值的ImageData对象。            |
1955| dx          | number | 是 | 填充区域在x轴方向的偏移量。                |
1956| dy          | number | 是 | 填充区域在y轴方向的偏移量。                |
1957| dirtyX      | number | 是 | 源图像数据矩形裁切范围左上角距离源图像左上角的x轴偏移量。 |
1958| dirtyY      | number | 是 | 源图像数据矩形裁切范围左上角距离源图像左上角的y轴偏移量。 |
1959| dirtyWidth  | number | 是 | 源图像数据矩形裁切范围的宽度。               |
1960| dirtyHeight | number | 是 | 源图像数据矩形裁切范围的高度。               |
1961
1962**示例:**
1963  ```html
1964  <!-- xxx.hml -->
1965  <div>
1966    <canvas id="putImageData" style="width: 200px; height: 150px; background-color: #D5D5D5;"></canvas>
1967  </div>
1968  ```
1969
1970  ```js
1971  //xxx.js
1972  export default {
1973      onShow() {
1974          const test = this.$element('putImageData')
1975          const ctx = test.getContext('2d');
1976          var imgData = ctx.createImageData(100, 100);
1977          for (var i = 0; i < imgData.data.length; i += 4) {
1978              imgData.data[i + 0] = 39;
1979              imgData.data[i + 1] = 135;
1980              imgData.data[i + 2] = 217;
1981              imgData.data[i + 3] = 255;
1982          }
1983          ctx.putImageData(imgData, 10, 10, 0, 0, 100, 50);
1984      }
1985  }
1986  ```
1987![jsCanvasPutimagedata](figures/jsCanvasPutimagedata.png)
1988
1989### putImageData
1990
1991putImageData(imageData: ImageData, dx: number, dy: number): void
1992
1993使用ImageData数据填充新的矩形区域。
1994
1995**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1996
1997**参数:**
1998
1999| 参数名 | 类型    | 必填 | 说明                         |
2000| ------ | ------- | ---- | ---------------------------- |
2001| imageData   | [ImageData](js-components-canvas-imagedata.md) | 是 | 包含像素值的ImageData对象。            |
2002| dx          | number | 是 | 填充区域在x轴方向的偏移量。                |
2003| dy          | number | 是 | 填充区域在y轴方向的偏移量。                |
2004
2005**示例:**
2006  ```html
2007  <!-- xxx.hml -->
2008  <div>
2009    <canvas id="putImageData" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
2010  </div>
2011  ```
2012
2013  ```js
2014  //xxx.js
2015  export default {
2016    onShow() {
2017      const test = this.$element('putImageData')
2018      const ctx = test.getContext('2d');
2019      var imgData = ctx.createImageData(100, 100);
2020      for (var i = 0; i < imgData.data.length; i += 4) {
2021        imgData.data[i + 0] = 255;
2022        imgData.data[i + 1] = 0;
2023        imgData.data[i + 2] = 0;
2024        imgData.data[i + 3] = 255;
2025    }
2026      ctx.putImageData(imgData, 10, 10);
2027    }
2028  }
2029  ```
2030
2031  ![zh-cn_image_0000001214463283](figures/zh-cn_image_0000001214463283.png)
2032
2033### getPixelMap<sup>9+</sup>
2034
2035getPixelMap(sx: number, sy: number, sw: number, sh: number): PixelMap
2036
2037获取用当前canvas指定区域内的像素创建的PixelMap对象。
2038
2039**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2040
2041**参数:**
2042
2043| 参数名 | 类型    | 必填 | 说明                         |
2044| ------ | ------- | ---- | ---------------------------- |
2045| sx   | number | 是 | 指定区域的左上角x坐标。 |
2046| sy   | number | 是 | 指定区域的左上角y坐标。 |
2047| sw   | number | 是 | 指定区域的宽度。     |
2048| sh   | number | 是 | 指定区域的高度。     |
2049
2050**返回值:**
2051
2052| 类型                                       | 说明                     |
2053| ---------------------------------------- | ---------------------- |
2054| [PixelMap](../../apis-image-kit/arkts-apis-image-PixelMap.md) | 返回包含指定区域像素的PixelMap对象。 |
2055
2056**示例:**
2057
2058  ```html
2059  <!-- xxx.hml -->
2060  <div>
2061    <canvas id="canvasId" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
2062  </div>
2063  ```
2064
2065  ```js
2066  //xxx.js
2067  export default {
2068    onShow() {
2069      const test = this.$element('canvasId')
2070      const ctx = test.getContext('2d');
2071      var pixelMap = ctx.getPixelMap(0, 0, 280, 300);
2072    }
2073  }
2074  ```
2075
2076### setLineDash
2077
2078setLineDash(segments: Array): void
2079
2080设置画布的虚线样式。
2081
2082**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2083
2084**参数:**
2085
2086| 参数名 | 类型    | 必填 | 说明                         |
2087| ------ | ------- | ---- | ---------------------------- |
2088| segments | Array | 是 | 作为数组用来描述线段如何交替和间距长度。 |
2089
2090**示例:**
2091  ```html
2092  <!-- xxx.hml -->
2093  <div>
2094    <canvas ref="canvas" style="width: 200px; height: 150px; background-color: #ffff00;"></canvas>
2095  </div>
2096  ```
2097
2098  ```js
2099  //xxx.js
2100  export default {
2101    onShow() {
2102      const el = this.$refs.canvas;
2103      const ctx = el.getContext('2d');
2104      ctx.arc(100, 75, 50, 0, 6.28);
2105      ctx.setLineDash([10,20]);
2106      ctx.stroke();
2107    }
2108  }
2109  ```
2110
2111  ![zh-cn_image_0000001214623229](figures/zh-cn_image_0000001214623229.png)
2112
2113### getLineDash
2114
2115getLineDash(): Array
2116
2117获得当前画布的虚线样式。
2118
2119**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2120
2121**返回值:**
2122
2123| 类型    | 说明                       |
2124| ----- | ------------------------ |
2125| Array | 返回数组,该数组用来描述线段如何交替和间距长度。 |
2126
2127**示例:**
2128  ```html
2129  <!-- xxx.hml -->
2130  <div>
2131    <canvas ref="canvas" style="width: 200px; height: 150px; "></canvas>
2132  </div>
2133  ```
2134
2135  ```js
2136  //xxx.js
2137  export default {
2138    onShow() {
2139      const el = this.$refs.canvas;
2140      const ctx = el.getContext('2d');
2141      var info = ctx.getLineDash();
2142    }
2143  }
2144  ```
2145
2146### transferFromImageBitmap<sup>7+</sup>
2147
2148transferFromImageBitmap(bitmap: ImageBitmap): void
2149
2150显示给定的[ImageBitmap对象](js-components-canvas-imagebitmap.md)。
2151
2152**系统能力:** SystemCapability.ArkUI.ArkUI.Full
2153
2154**参数:**
2155
2156| 参数名 | 类型    | 必填 | 说明                         |
2157| ------ | ------- | ---- | ---------------------------- |
2158| bitmap | [ImageBitmap](js-components-canvas-imagebitmap.md) | 是 | 待显示的ImageBitmap对象。 |
2159
2160**示例:**
2161  ```html
2162  <!-- xxx.hml -->
2163  <div>
2164    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
2165  </div>
2166  ```
2167
2168  ```js
2169  //xxx.js
2170  export default {
2171    onShow() {
2172      const el = this.$refs.canvas;
2173      const ctx = el.getContext('2d');
2174      var canvas = this.$refs.canvas.getContext('2d');
2175      var offscreen = new OffscreenCanvas(500,500);
2176      var offscreenCanvasCtx = offscreen.getContext("2d");
2177      offscreenCanvasCtx.fillRect(0, 0, 200, 200);
2178
2179      var bitmap = offscreen.transferToImageBitmap();
2180      canvas.transferFromImageBitmap(bitmap);
2181    }
2182  }
2183  ```
2184
2185  ![zh-cn_image_0000001168984882](figures/zh-cn_image_0000001168984882.png)