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