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