1e41f4b71Sopenharmony_ci# OffscreenCanvasRenderingContext2D对象
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci>  **说明:**
4e41f4b71Sopenharmony_ci>  从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci使用OffscreenCanvasRenderingContext2D在[OffscreenCanvas对象](js-components-canvas-offscreencanvas.md)上进行绘制,绘制对象可以是矩形、文本、图片等
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ci
10e41f4b71Sopenharmony_ci## 属性
11e41f4b71Sopenharmony_ci
12e41f4b71Sopenharmony_ci除支持与[CanvasRenderingContext2D对象](js-components-canvas-canvasrenderingcontext2d.md)相同的属性外,还支持如下属性:
13e41f4b71Sopenharmony_ci
14e41f4b71Sopenharmony_ci| 属性     | 类型     | 描述                                       |
15e41f4b71Sopenharmony_ci| ------ | ------ | ---------------------------------------- |
16e41f4b71Sopenharmony_ci| filter | string | 设置图像的滤镜。<br/>支持的滤镜效果如下:<br/>-&nbsp;blur:给图像设置高斯模糊<br/>-&nbsp;brightness:给图片应用一种线性乘法,使其看起来更亮或更暗<br/>-&nbsp;contrast:调整图像的对比度<br/>-&nbsp;drop-shadow:给图像设置一个阴影效果<br/>-&nbsp;grayscale:将图像转换为灰度图像<br/>-&nbsp;hue-rotate:给图像应用色相旋转<br/>-&nbsp;invert:反转输入图像<br/>-&nbsp;opacity:转化图像的透明程度<br/>-&nbsp;saturate:转换图像饱和度<br/>-&nbsp;sepia:将图像转换为深褐色 |
17e41f4b71Sopenharmony_ci
18e41f4b71Sopenharmony_ci**示例:** 
19e41f4b71Sopenharmony_ci```html
20e41f4b71Sopenharmony_ci<!-- xxx.hml -->
21e41f4b71Sopenharmony_ci<div style="width: 500px; height: 500px;">
22e41f4b71Sopenharmony_ci  <canvas ref="canvasId" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
23e41f4b71Sopenharmony_ci</div>
24e41f4b71Sopenharmony_ci```
25e41f4b71Sopenharmony_ci
26e41f4b71Sopenharmony_ci```js
27e41f4b71Sopenharmony_ci// xxx.js
28e41f4b71Sopenharmony_ciexport default {
29e41f4b71Sopenharmony_ci  onShow(){
30e41f4b71Sopenharmony_ci    var ctx = this.$refs.canvasId.getContext('2d');
31e41f4b71Sopenharmony_ci    var offscreen = new OffscreenCanvas(360, 500);
32e41f4b71Sopenharmony_ci    var offCanvas2 = offscreen.getContext("2d");
33e41f4b71Sopenharmony_ci    var img = new Image();
34e41f4b71Sopenharmony_ci    img.src = 'common/images/flower.jpg';
35e41f4b71Sopenharmony_ci    offCanvas2.drawImage(img, 0, 0, 100, 100);
36e41f4b71Sopenharmony_ci    offCanvas2.filter = 'blur(5px)';
37e41f4b71Sopenharmony_ci    offCanvas2.drawImage(img, 100, 0, 100, 100);
38e41f4b71Sopenharmony_ci
39e41f4b71Sopenharmony_ci    offCanvas2.filter = 'grayscale(50%)';
40e41f4b71Sopenharmony_ci    offCanvas2.drawImage(img, 200, 0, 100, 100);
41e41f4b71Sopenharmony_ci
42e41f4b71Sopenharmony_ci    offCanvas2.filter = 'hue-rotate(90deg)';
43e41f4b71Sopenharmony_ci    offCanvas2.drawImage(img, 0, 100, 100, 100);
44e41f4b71Sopenharmony_ci
45e41f4b71Sopenharmony_ci    offCanvas2.filter = 'invert(100%)';
46e41f4b71Sopenharmony_ci    offCanvas2.drawImage(img, 100, 100, 100, 100);
47e41f4b71Sopenharmony_ci
48e41f4b71Sopenharmony_ci    offCanvas2.filter = 'drop-shadow(8px 8px 10px green)';
49e41f4b71Sopenharmony_ci    offCanvas2.drawImage(img, 200, 100, 100, 100);
50e41f4b71Sopenharmony_ci
51e41f4b71Sopenharmony_ci    offCanvas2.filter = 'brightness(0.4)';
52e41f4b71Sopenharmony_ci    offCanvas2.drawImage(img, 0, 200, 100, 100);
53e41f4b71Sopenharmony_ci
54e41f4b71Sopenharmony_ci    offCanvas2.filter = 'opacity(25%)';
55e41f4b71Sopenharmony_ci    offCanvas2.drawImage(img, 100, 200, 100, 100);
56e41f4b71Sopenharmony_ci
57e41f4b71Sopenharmony_ci    offCanvas2.filter = 'saturate(30%)';
58e41f4b71Sopenharmony_ci    offCanvas2.drawImage(img, 200, 200, 100, 100);
59e41f4b71Sopenharmony_ci
60e41f4b71Sopenharmony_ci    offCanvas2.filter = 'sepia(60%)';
61e41f4b71Sopenharmony_ci    offCanvas2.drawImage(img, 0, 300, 100, 100);
62e41f4b71Sopenharmony_ci
63e41f4b71Sopenharmony_ci    offCanvas2.filter = 'contrast(200%)';
64e41f4b71Sopenharmony_ci    offCanvas2.drawImage(img, 100, 300, 100, 100);
65e41f4b71Sopenharmony_ci    var bitmap = offscreen.transferToImageBitmap();
66e41f4b71Sopenharmony_ci    ctx.transferFromImageBitmap(bitmap);
67e41f4b71Sopenharmony_ci  }
68e41f4b71Sopenharmony_ci}
69e41f4b71Sopenharmony_ci```
70e41f4b71Sopenharmony_ci
71e41f4b71Sopenharmony_ci## 方法
72e41f4b71Sopenharmony_ci
73e41f4b71Sopenharmony_ci除支持与CanvasRenderingContext2D对象相同的方法外,还支持如下方法:
74e41f4b71Sopenharmony_ci
75e41f4b71Sopenharmony_ci
76e41f4b71Sopenharmony_ci### isPointInPath
77e41f4b71Sopenharmony_ci
78e41f4b71Sopenharmony_ciisPointInPath(path?: Path2D, x: number, y: number): boolean
79e41f4b71Sopenharmony_ci
80e41f4b71Sopenharmony_ci判断指定点是否在路径的区域内。
81e41f4b71Sopenharmony_ci
82e41f4b71Sopenharmony_ci**参数:** 
83e41f4b71Sopenharmony_ci| 参数名  | 参数类型   | 必填   | 描述                            |
84e41f4b71Sopenharmony_ci| ---- | ------ | ---- | ----------------------------- |
85e41f4b71Sopenharmony_ci| path | Path2D | 否    | 可选对象,指定用来判断的路径。若没有设置,则使用当前路径。 |
86e41f4b71Sopenharmony_ci| x    | number | 是    | 待判断点的x轴坐标。                    |
87e41f4b71Sopenharmony_ci| y    | number | 是    | 待判断点的y轴坐标。                    |
88e41f4b71Sopenharmony_ci
89e41f4b71Sopenharmony_ci**返回值:** 
90e41f4b71Sopenharmony_ci| 类型      | 说明            |
91e41f4b71Sopenharmony_ci| ------- | ------------- |
92e41f4b71Sopenharmony_ci| boolean | 指定点是否在路径的区域内。 |
93e41f4b71Sopenharmony_ci
94e41f4b71Sopenharmony_ci**示例:** 
95e41f4b71Sopenharmony_ci```html
96e41f4b71Sopenharmony_ci<!-- xxx.hml -->
97e41f4b71Sopenharmony_ci<div class="container" style="width: 500px; height: 500px;">
98e41f4b71Sopenharmony_ci    <text class="textsize">In path:{{textValue}}</text>
99e41f4b71Sopenharmony_ci    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
100e41f4b71Sopenharmony_ci</div>
101e41f4b71Sopenharmony_ci```
102e41f4b71Sopenharmony_ci
103e41f4b71Sopenharmony_ci```css
104e41f4b71Sopenharmony_ci/* xxx.css */
105e41f4b71Sopenharmony_ci.container {
106e41f4b71Sopenharmony_ci    display: flex;
107e41f4b71Sopenharmony_ci    flex-direction: column;
108e41f4b71Sopenharmony_ci    background-color: #F1F3F5;
109e41f4b71Sopenharmony_ci    align-items: center;
110e41f4b71Sopenharmony_ci    justify-content: center;
111e41f4b71Sopenharmony_ci    width: 100%;
112e41f4b71Sopenharmony_ci    height: 100%;
113e41f4b71Sopenharmony_ci}
114e41f4b71Sopenharmony_ci
115e41f4b71Sopenharmony_cicanvas {
116e41f4b71Sopenharmony_ci    width: 600px;
117e41f4b71Sopenharmony_ci    height: 600px;
118e41f4b71Sopenharmony_ci    background-color: #fdfdfd;
119e41f4b71Sopenharmony_ci    border: none;
120e41f4b71Sopenharmony_ci}
121e41f4b71Sopenharmony_ci
122e41f4b71Sopenharmony_ci.textsize {
123e41f4b71Sopenharmony_ci    font-size: 40px;
124e41f4b71Sopenharmony_ci}
125e41f4b71Sopenharmony_ci```
126e41f4b71Sopenharmony_ci
127e41f4b71Sopenharmony_ci```js
128e41f4b71Sopenharmony_ci// xxx.js
129e41f4b71Sopenharmony_ciexport default {
130e41f4b71Sopenharmony_ci  data: {
131e41f4b71Sopenharmony_ci    textValue: 0
132e41f4b71Sopenharmony_ci  },
133e41f4b71Sopenharmony_ci  onShow(){
134e41f4b71Sopenharmony_ci    var canvas = this.$refs.canvas.getContext('2d');
135e41f4b71Sopenharmony_ci    var offscreen = new OffscreenCanvas(500,500);
136e41f4b71Sopenharmony_ci    var offscreenCanvasCtx = offscreen.getContext("2d");
137e41f4b71Sopenharmony_ci
138e41f4b71Sopenharmony_ci    offscreenCanvasCtx.rect(10, 10, 100, 100);
139e41f4b71Sopenharmony_ci    offscreenCanvasCtx.fill();
140e41f4b71Sopenharmony_ci    this.textValue = offscreenCanvasCtx.isPointInPath(30, 70);
141e41f4b71Sopenharmony_ci
142e41f4b71Sopenharmony_ci    var bitmap = offscreen.transferToImageBitmap();
143e41f4b71Sopenharmony_ci    canvas.transferFromImageBitmap(bitmap);
144e41f4b71Sopenharmony_ci  }
145e41f4b71Sopenharmony_ci}
146e41f4b71Sopenharmony_ci```
147e41f4b71Sopenharmony_ci
148e41f4b71Sopenharmony_ci![zh-cn_image_0000001224354967](figures/zh-cn_image_0000001224354967.png)
149e41f4b71Sopenharmony_ci
150e41f4b71Sopenharmony_ci### isPointInStroke
151e41f4b71Sopenharmony_ci
152e41f4b71Sopenharmony_ciisPointInStroke(path?: Path2D, x: number, y: number): boolean
153e41f4b71Sopenharmony_ci
154e41f4b71Sopenharmony_ci判断指定点是否在路径的边缘线上。
155e41f4b71Sopenharmony_ci
156e41f4b71Sopenharmony_ci**参数:** 
157e41f4b71Sopenharmony_ci| 参数名  | 参数类型   | 必填   | 描述                            |
158e41f4b71Sopenharmony_ci| ---- | ------ | ---- | ----------------------------- |
159e41f4b71Sopenharmony_ci| path | Path2D | 否    | 可选对象,指定用来判断的路径。若没有设置,则使用当前路径。 |
160e41f4b71Sopenharmony_ci| x    | number | 是    | 待判断点的x轴坐标。                    |
161e41f4b71Sopenharmony_ci| y    | number | 是    | 待判断点的y轴坐标。                    |
162e41f4b71Sopenharmony_ci
163e41f4b71Sopenharmony_ci**返回值:** 
164e41f4b71Sopenharmony_ci| 类型      | 说明            |
165e41f4b71Sopenharmony_ci| ------- | ------------- |
166e41f4b71Sopenharmony_ci| boolean | 指定点是否在路径的区域内。 |
167e41f4b71Sopenharmony_ci
168e41f4b71Sopenharmony_ci**示例:** 
169e41f4b71Sopenharmony_ci```html
170e41f4b71Sopenharmony_ci<!-- xxx.hml -->
171e41f4b71Sopenharmony_ci<div class="container" style="width: 500px; height: 500px;">
172e41f4b71Sopenharmony_ci    <text class="textsize">In stroke:{{textValue}}</text>
173e41f4b71Sopenharmony_ci    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
174e41f4b71Sopenharmony_ci</div>
175e41f4b71Sopenharmony_ci```
176e41f4b71Sopenharmony_ci
177e41f4b71Sopenharmony_ci```css
178e41f4b71Sopenharmony_ci/* xxx.css */
179e41f4b71Sopenharmony_ci.container {
180e41f4b71Sopenharmony_ci    display: flex;
181e41f4b71Sopenharmony_ci    flex-direction: column;
182e41f4b71Sopenharmony_ci    background-color: #F1F3F5;
183e41f4b71Sopenharmony_ci    align-items: center;
184e41f4b71Sopenharmony_ci    justify-content: center;
185e41f4b71Sopenharmony_ci    width: 100%;
186e41f4b71Sopenharmony_ci    height: 100%;
187e41f4b71Sopenharmony_ci}
188e41f4b71Sopenharmony_ci
189e41f4b71Sopenharmony_cicanvas {
190e41f4b71Sopenharmony_ci    width: 600px;
191e41f4b71Sopenharmony_ci    height: 600px;
192e41f4b71Sopenharmony_ci    background-color: #fdfdfd;
193e41f4b71Sopenharmony_ci    border: none;
194e41f4b71Sopenharmony_ci}
195e41f4b71Sopenharmony_ci
196e41f4b71Sopenharmony_ci.textsize {
197e41f4b71Sopenharmony_ci    font-size: 40px;
198e41f4b71Sopenharmony_ci}
199e41f4b71Sopenharmony_ci```
200e41f4b71Sopenharmony_ci
201e41f4b71Sopenharmony_ci```js
202e41f4b71Sopenharmony_ci// xxx.js
203e41f4b71Sopenharmony_ciexport default {
204e41f4b71Sopenharmony_ci  data: {
205e41f4b71Sopenharmony_ci    textValue: 0
206e41f4b71Sopenharmony_ci  },
207e41f4b71Sopenharmony_ci  onShow(){
208e41f4b71Sopenharmony_ci    var canvas = this.$refs.canvas.getContext('2d');
209e41f4b71Sopenharmony_ci    var offscreen = new OffscreenCanvas(500,500);
210e41f4b71Sopenharmony_ci    var offscreenCanvasCtx = offscreen.getContext("2d");
211e41f4b71Sopenharmony_ci
212e41f4b71Sopenharmony_ci    offscreenCanvasCtx.rect(10, 10, 100, 100);
213e41f4b71Sopenharmony_ci    offscreenCanvasCtx.stroke();
214e41f4b71Sopenharmony_ci    this.textValue = offscreenCanvasCtx.isPointInStroke(50, 10);
215e41f4b71Sopenharmony_ci
216e41f4b71Sopenharmony_ci    var bitmap = offscreen.transferToImageBitmap();
217e41f4b71Sopenharmony_ci    canvas.transferFromImageBitmap(bitmap);
218e41f4b71Sopenharmony_ci  }
219e41f4b71Sopenharmony_ci}
220e41f4b71Sopenharmony_ci```
221e41f4b71Sopenharmony_ci
222e41f4b71Sopenharmony_ci![zh-cn_image_0000001178875308](figures/zh-cn_image_0000001178875308.png)
223e41f4b71Sopenharmony_ci
224e41f4b71Sopenharmony_ci### resetTransform
225e41f4b71Sopenharmony_ci
226e41f4b71Sopenharmony_ciresetTransform(): void
227e41f4b71Sopenharmony_ci
228e41f4b71Sopenharmony_ci**示例:** 
229e41f4b71Sopenharmony_ci```html
230e41f4b71Sopenharmony_ci<!-- xxx.hml -->
231e41f4b71Sopenharmony_ci<div class="container" style="width: 500px; height: 500px;">
232e41f4b71Sopenharmony_ci    <text class="textsize">In path:{{textValue}}</text>
233e41f4b71Sopenharmony_ci    <canvas ref="canvas" style="width: 500px; height: 500px; background-color: #ffff00;"></canvas>
234e41f4b71Sopenharmony_ci</div>
235e41f4b71Sopenharmony_ci```
236e41f4b71Sopenharmony_ci
237e41f4b71Sopenharmony_ci```css
238e41f4b71Sopenharmony_ci/* xxx.css */
239e41f4b71Sopenharmony_ci.container {
240e41f4b71Sopenharmony_ci    display: flex;
241e41f4b71Sopenharmony_ci    flex-direction: column;
242e41f4b71Sopenharmony_ci    background-color: #F1F3F5;
243e41f4b71Sopenharmony_ci    align-items: center;
244e41f4b71Sopenharmony_ci    justify-content: center;
245e41f4b71Sopenharmony_ci    width: 100%;
246e41f4b71Sopenharmony_ci    height: 100%;
247e41f4b71Sopenharmony_ci}
248e41f4b71Sopenharmony_ci
249e41f4b71Sopenharmony_cicanvas {
250e41f4b71Sopenharmony_ci    width: 600px;
251e41f4b71Sopenharmony_ci    height: 600px;
252e41f4b71Sopenharmony_ci    background-color: #fdfdfd;
253e41f4b71Sopenharmony_ci    border: none;
254e41f4b71Sopenharmony_ci}
255e41f4b71Sopenharmony_ci
256e41f4b71Sopenharmony_ci.textsize {
257e41f4b71Sopenharmony_ci    font-size: 40px;
258e41f4b71Sopenharmony_ci}
259e41f4b71Sopenharmony_ci```
260e41f4b71Sopenharmony_ci
261e41f4b71Sopenharmony_ci```js
262e41f4b71Sopenharmony_ci// xxx.js
263e41f4b71Sopenharmony_ciexport default {
264e41f4b71Sopenharmony_ci  data:{
265e41f4b71Sopenharmony_ci   textValue:0
266e41f4b71Sopenharmony_ci  },
267e41f4b71Sopenharmony_ci  onShow(){
268e41f4b71Sopenharmony_ci   var canvas = this.$refs.canvas.getContext('2d');
269e41f4b71Sopenharmony_ci   var offscreen = new OffscreenCanvas(500,500);
270e41f4b71Sopenharmony_ci   var offscreenCanvasCtx = offscreen.getContext("2d");
271e41f4b71Sopenharmony_ci
272e41f4b71Sopenharmony_ci   offscreenCanvasCtx.transform(1, 0, 1.7, 1, 0, 0);
273e41f4b71Sopenharmony_ci   offscreenCanvasCtx.fillStyle = '#a9a9a9';
274e41f4b71Sopenharmony_ci   offscreenCanvasCtx.fillRect(40, 40, 50, 20);
275e41f4b71Sopenharmony_ci   offscreenCanvasCtx.fillRect(40, 90, 50, 20);
276e41f4b71Sopenharmony_ci
277e41f4b71Sopenharmony_ci   // Non-skewed rectangles
278e41f4b71Sopenharmony_ci   offscreenCanvasCtx.resetTransform();
279e41f4b71Sopenharmony_ci   offscreenCanvasCtx.fillStyle = '#ff0000';
280e41f4b71Sopenharmony_ci   offscreenCanvasCtx.fillRect(40, 40, 50, 20);
281e41f4b71Sopenharmony_ci   offscreenCanvasCtx.fillRect(40, 90, 50, 20);
282e41f4b71Sopenharmony_ci
283e41f4b71Sopenharmony_ci   var bitmap = offscreen.transferToImageBitmap();
284e41f4b71Sopenharmony_ci   canvas.transferFromImageBitmap(bitmap);
285e41f4b71Sopenharmony_ci  } 
286e41f4b71Sopenharmony_ci}
287e41f4b71Sopenharmony_ci```
288e41f4b71Sopenharmony_ci
289e41f4b71Sopenharmony_ci![zh-cn_image_0000001179035242](figures/zh-cn_image_0000001179035242.png)