ts-canvasrenderingcontext2d.md 91.9 KB
Newer Older
Z
zengyawen 已提交
1 2
# CanvasRenderingContext2D对象

L
lanyill 已提交
3 4
使用RenderingContext在Canvas组件上进行绘制,绘制对象可以是矩形、文本、图片等。

H
HelloCrease 已提交
5 6
> **说明:**
>
Z
zengyawen 已提交
7
> 从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
Z
zengyawen 已提交
8 9


Z
zengyawen 已提交
10 11 12 13 14

## 接口

CanvasRenderingContext2D(setting: RenderingContextSetting)

Z
zhongjianfei 已提交
15 16
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
17 18
**参数:**

H
HelloCrease 已提交
19 20 21
| 参数名     | 参数类型                                     | 必填   | 参数描述                                     |
| ------- | ---------------------------------------- | ---- | ---------------------------------------- |
| setting | [RenderingContextSettings](#renderingcontextsettings) | 是    | 见[RenderingContextSettings](#renderingcontextsettings)。 |
Z
zengyawen 已提交
22 23 24 25


### RenderingContextSettings

26
RenderingContextSettings(antialias?: boolean)
Z
zengyawen 已提交
27

Y
yaoyuchi 已提交
28
用来配置CanvasRenderingContext2D对象的参数,包括是否开启抗锯齿。
Z
zengyawen 已提交
29

Z
zhongjianfei 已提交
30 31
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
32
**参数:**
Z
zengyawen 已提交
33

H
HelloCrease 已提交
34 35 36
| 参数名       | 参数类型    | 必填   | 参数描述                          |
| --------- | ------- | ---- | ----------------------------- |
| antialias | boolean | 否    | 表明canvas是否开启抗锯齿。<br>默认值:false |
Z
zengyawen 已提交
37 38 39 40


## 属性

Y
yamila 已提交
41 42
| 名称                                                  | 类型                                                         | 描述                                                         |
| ----------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
Z
zhongjianfei 已提交
43
| [fillStyle](#fillstyle)                               | string&nbsp;\|&nbsp;[CanvasGradient](ts-components-canvas-canvasgradient.md)&nbsp;\|&nbsp;[CanvasPattern](#canvaspattern) | 指定绘制的填充色。<br/>-&nbsp;类型为string时,表示设置填充区域的颜色。<br/>-&nbsp;类型为CanvasGradient时,表示渐变对象,使用[createLinearGradient](#createlineargradient)方法创建。<br/>-&nbsp;类型为CanvasPattern时,使用[createPattern](#createpattern)方法创建。<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
Y
yamila 已提交
44
| [lineWidth](#linewidth)                               | number                                                       | 设置绘制线条的宽度。                                         |
Z
zhongjianfei 已提交
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| [strokeStyle](#strokestyle)                           | string&nbsp;\|&nbsp;[CanvasGradient](ts-components-canvas-canvasgradient.md)&nbsp;\|&nbsp;[CanvasPattern](#canvaspattern) | 设置描边的颜色。<br/>-&nbsp;类型为string时,表示设置描边使用的颜色。<br/>-&nbsp;类型为CanvasGradient时,表示渐变对象,使用[createLinearGradient](#createlineargradient)方法创建。<br/>-&nbsp;类型为CanvasPattern时,使用[createPattern](#createpattern)方法创建。<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| [lineCap](#linecap)                                   | CanvasLineCap                                                | 指定线端点的样式,可选值为:<br/>-&nbsp;'butt':线端点以方形结束。<br/>-&nbsp;'round':线端点以圆形结束。<br/>-&nbsp;'square':线端点以方形结束,该样式下会增加一个长度和线段厚度相同,宽度是线段厚度一半的矩形。<br/>默认值:'butt'<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| [lineJoin](#linejoin)                                 | CanvasLineJoin                                               | 指定线段间相交的交点样式,可选值为:<br/>-&nbsp;'round':在线段相连处绘制一个扇形,扇形的圆角半径是线段的宽度。<br/>-&nbsp;'bevel':在线段相连处使用三角形为底填充,&nbsp;每个部分矩形拐角独立。<br/>-&nbsp;'miter':在相连部分的外边缘处进行延伸,使其相交于一点,形成一个菱形区域,该属性可以通过设置miterLimit属性展现效果。<br/>默认值:'miter'<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| [miterLimit](#miterlimit)                             | number                                                       | 设置斜接面限制值,该值指定了线条相交处内角和外角的距离。  <br/>默认值:10<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| [font](#font)                                         | string                                                       | 设置文本绘制中的字体样式。<br/>语法:ctx.font='font-size&nbsp;font-family'<br/>-&nbsp;font-size(可选),指定字号和行高,单位只支持px。<br/>-&nbsp;font-family(可选),指定字体系列。<br/>语法:ctx.font='font-style&nbsp;font-weight&nbsp;font-size&nbsp;font-family'<br/>-&nbsp;font-style(可选),用于指定字体样式,支持如下几种样式:'normal','italic'。<br/>-&nbsp;font-weight(可选),用于指定字体的粗细,支持如下几种类型:'normal',&nbsp;'bold',&nbsp;'bolder',&nbsp;'lighter',&nbsp;100,&nbsp;200,&nbsp;300,&nbsp;400,&nbsp;500,&nbsp;600,&nbsp;700,&nbsp;800,&nbsp;900。<br/>-&nbsp;font-size(可选),指定字号和行高,单位只支持px。<br/>-&nbsp;font-family(可选),指定字体系列,支持如下几种类型:'sans-serif',&nbsp;'serif',&nbsp;'monospace'。<br/>默认值:'normal normal 14px sans-serif'<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| [textAlign](#textalign)                               | CanvasTextAlign                                              | 设置文本绘制中的文本对齐方式,可选值为:<br/>-&nbsp;'left':文本左对齐。<br/>-&nbsp;'right':文本右对齐。<br/>-&nbsp;'center':文本居中对齐。<br/>-&nbsp;'start':文本对齐界线开始的地方。<br/>-&nbsp;'end':文本对齐界线结束的地方。<br/>ltr布局模式下'start'和'left'一致,rtl布局模式下'start'和'right'一致·。<br/>默认值:'left'<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| [textBaseline](#textbaseline)                         | CanvasTextBaseline                                           | 设置文本绘制中的水平对齐方式,可选值为:<br/>-&nbsp;'alphabetic':文本基线是标准的字母基线。<br/>-&nbsp;'top':文本基线在文本块的顶部。<br/>-&nbsp;'hanging':文本基线是悬挂基线。<br/>-&nbsp;'middle':文本基线在文本块的中间。<br/>-&nbsp;'ideographic':文字基线是表意字基线;如果字符本身超出了alphabetic基线,那么ideograhpic基线位置在字符本身的底部。<br/>-&nbsp;'bottom':文本基线在文本块的底部。&nbsp;与ideographic基线的区别在于ideographic基线不需要考虑下行字母。<br/>默认值:'alphabetic'<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| [globalAlpha](#globalalpha)                           | number                                                       | 设置透明度,0.0为完全透明,1.0为完全不透明。<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| [lineDashOffset](#linedashoffset)                     | number                                                       | 设置画布的虚线偏移量,精度为float。    <br/>默认值:0.0<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| [globalCompositeOperation](#globalcompositeoperation) | string                                                       | 设置合成操作的方式。类型字段可选值有'source-over','source-atop','source-in','source-out','destination-over','destination-atop','destination-in','destination-out','lighter','copy','xor'。<br/>默认值:'source-over'<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| [shadowBlur](#shadowblur)                             | number                                                       | 设置绘制阴影时的模糊级别,值越大越模糊,精度为float。   <br/>默认值:0.0<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| [shadowColor](#shadowcolor)                           | string                                                       | 设置绘制阴影时的阴影颜色。<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| [shadowOffsetX](#shadowoffsetx)                       | number                                                       | 设置绘制阴影时和原有对象的水平偏移值。<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| [shadowOffsetY](#shadowoffsety)                       | number                                                       | 设置绘制阴影时和原有对象的垂直偏移值。<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
| [imageSmoothingEnabled](#imagesmoothingenabled)       | boolean                                                      | 用于设置绘制图片时是否进行图像平滑度调整,true为启用,false为不启用。 <br/>默认值:true<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
Z
zengyawen 已提交
60

H
HelloCrease 已提交
61 62 63
> **说明:**
>
> fillStyle、shadowColor与 strokeStyle 中string类型格式为 'rgb(255, 255, 255)','rgba(255, 255, 255, 1.0)','\#FFFFFF'。
Z
zengyawen 已提交
64 65 66


### fillStyle
Z
zengyawen 已提交
67

H
geshi  
HelloCrease 已提交
68 69
```ts
// xxx.ets
Z
zengyawen 已提交
70 71 72
@Entry
@Component
struct FillStyleExample {
Y
yamila 已提交
73 74
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
75 76 77 78 79 80 81 82 83

  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
          this.context.fillStyle = '#0000ff'
L
lanyill 已提交
84
          this.context.fillRect(20, 20, 150, 100)
Z
zengyawen 已提交
85 86 87 88 89 90 91 92
        })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
93
![zh-cn_image_0000001238712411](figures/zh-cn_image_0000001238712411.png)
Z
zengyawen 已提交
94

Z
zengyawen 已提交
95 96

### lineWidth
Z
zengyawen 已提交
97

H
geshi  
HelloCrease 已提交
98 99
```ts
// xxx.ets
Z
zengyawen 已提交
100 101 102
@Entry
@Component
struct LineWidthExample {
Y
yamila 已提交
103 104
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
        this.context.lineWidth = 5
        this.context.strokeRect(25, 25, 85, 105)
      })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
123 124
![zh-cn_image_0000001194192432](figures/zh-cn_image_0000001194192432.png)

Z
zengyawen 已提交
125

Z
zengyawen 已提交
126
### strokeStyle
Z
zengyawen 已提交
127

H
geshi  
HelloCrease 已提交
128 129
```ts
// xxx.ets
Z
zengyawen 已提交
130 131 132
@Entry
@Component
struct StrokeStyleExample {
Y
yamila 已提交
133 134
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154

  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
          this.context.lineWidth = 10
          this.context.strokeStyle = '#0000ff'
          this.context.strokeRect(25, 25, 155, 105)
        })
    }
    .width('100%')
    .height('100%')
  }
}
```


Z
zengyawen 已提交
155 156 157 158
![zh-cn_image_0000001194352432](figures/zh-cn_image_0000001194352432.png)


### lineCap
Z
zengyawen 已提交
159

H
geshi  
HelloCrease 已提交
160 161
```ts
// xxx.ets
Z
zengyawen 已提交
162 163 164
@Entry
@Component
struct LineCapExample {
Y
yamila 已提交
165 166
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
          this.context.lineWidth = 8
          this.context.beginPath()
          this.context.lineCap = 'round'
          this.context.moveTo(30, 50)
          this.context.lineTo(220, 50)
          this.context.stroke()
        })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
189 190
![zh-cn_image_0000001238952373](figures/zh-cn_image_0000001238952373.png)

Z
zengyawen 已提交
191

Z
zengyawen 已提交
192
### lineJoin
Z
zengyawen 已提交
193

H
geshi  
HelloCrease 已提交
194 195
```ts
// xxx.ets
Z
zengyawen 已提交
196 197 198
@Entry
@Component
struct LineJoinExample {
Y
yamila 已提交
199 200
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223

  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
        this.context.beginPath()
        this.context.lineWidth = 8
        this.context.lineJoin = 'miter'
        this.context.moveTo(30, 30)
        this.context.lineTo(120, 60)
        this.context.lineTo(30, 110)
        this.context.stroke()
      })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
224
![zh-cn_image_0000001194032454](figures/zh-cn_image_0000001194032454.png)
Z
zengyawen 已提交
225

Z
zengyawen 已提交
226 227

### miterLimit
Z
zengyawen 已提交
228

H
geshi  
HelloCrease 已提交
229 230
```ts
// xxx.ets
Z
zengyawen 已提交
231 232 233
@Entry
@Component
struct MiterLimit {
Y
yamila 已提交
234 235
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258
  
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
          this.context.lineWidth = 8
          this.context.lineJoin = 'miter'
          this.context.miterLimit = 3
          this.context.moveTo(30, 30)
          this.context.lineTo(60, 35)
          this.context.lineTo(30, 37)
          this.context.stroke()
      })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
259 260
![zh-cn_image_0000001239032409](figures/zh-cn_image_0000001239032409.png)

Z
zengyawen 已提交
261

Z
zengyawen 已提交
262
### font
Z
zengyawen 已提交
263

H
geshi  
HelloCrease 已提交
264 265
```ts
// xxx.ets
Z
zengyawen 已提交
266 267
@Entry
@Component
G
gmy 已提交
268
struct Fonts {
Y
yamila 已提交
269 270
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288
  
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
          this.context.font = '30px sans-serif'
          this.context.fillText("Hello World", 20, 60)
      })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
289
![zh-cn_image_0000001193872488](figures/zh-cn_image_0000001193872488.png)
Z
zengyawen 已提交
290

Z
zengyawen 已提交
291 292

### textAlign
Z
zengyawen 已提交
293

H
geshi  
HelloCrease 已提交
294 295
```ts
// xxx.ets
Z
zengyawen 已提交
296 297
@Entry
@Component
Y
yaoyuchi 已提交
298
struct CanvasExample {
Y
yamila 已提交
299 300
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331
  
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
        this.context.strokeStyle = '#0000ff'
        this.context.moveTo(140, 10)
        this.context.lineTo(140, 160)
        this.context.stroke()
        this.context.font = '18px sans-serif'
        this.context.textAlign = 'start'
        this.context.fillText('textAlign=start', 140, 60)
        this.context.textAlign = 'end'
        this.context.fillText('textAlign=end', 140, 80)
        this.context.textAlign = 'left'
        this.context.fillText('textAlign=left', 140, 100)
        this.context.textAlign = 'center'
        this.context.fillText('textAlign=center',140, 120)
        this.context.textAlign = 'right'
        this.context.fillText('textAlign=right',140, 140)
      })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
332 333
![zh-cn_image_0000001238832385](figures/zh-cn_image_0000001238832385.png)

Z
zengyawen 已提交
334

Z
zengyawen 已提交
335
### textBaseline
Z
zengyawen 已提交
336

H
geshi  
HelloCrease 已提交
337 338
```ts
// xxx.ets
Z
zengyawen 已提交
339 340 341
@Entry
@Component
struct TextBaseline {
Y
yamila 已提交
342 343
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374
  
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
          this.context.strokeStyle = '#0000ff'
          this.context.moveTo(0, 120)
          this.context.lineTo(400, 120)
          this.context.stroke()
          this.context.font = '20px sans-serif'
          this.context.textBaseline = 'top'
          this.context.fillText('Top', 10, 120)
          this.context.textBaseline = 'bottom'
          this.context.fillText('Bottom', 55, 120)
          this.context.textBaseline = 'middle'
          this.context.fillText('Middle', 125, 120)
          this.context.textBaseline = 'alphabetic'
          this.context.fillText('Alphabetic', 195, 120)
          this.context.textBaseline = 'hanging'
          this.context.fillText('Hanging', 295, 120)
      })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
375
![zh-cn_image_0000001238712413](figures/zh-cn_image_0000001238712413.png)
Z
zengyawen 已提交
376

Z
zengyawen 已提交
377 378

### globalAlpha
Z
zengyawen 已提交
379

H
geshi  
HelloCrease 已提交
380 381
```ts
// xxx.ets
Z
zengyawen 已提交
382 383 384
@Entry
@Component
struct GlobalAlpha {
Y
yamila 已提交
385 386
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
387 388 389 390 391 392 393 394
  
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
L
lanyill 已提交
395 396 397 398 399
          this.context.fillStyle = 'rgb(0,0,255)'
          this.context.fillRect(0, 0, 50, 50)
          this.context.globalAlpha = 0.4
          this.context.fillStyle = 'rgb(0,0,255)'
          this.context.fillRect(50, 50, 50, 50)
Z
zengyawen 已提交
400 401 402 403 404 405 406 407
      })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
408 409
![zh-cn_image_0000001194192434](figures/zh-cn_image_0000001194192434.png)

Z
zengyawen 已提交
410

Z
zengyawen 已提交
411
### lineDashOffset
Z
zengyawen 已提交
412

H
geshi  
HelloCrease 已提交
413 414
```ts
// xxx.ets
Z
zengyawen 已提交
415 416 417
@Entry
@Component
struct LineDashOffset {
Y
yamila 已提交
418 419
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
420 421 422 423 424 425 426 427 428 429
  
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
          this.context.arc(100, 75, 50, 0, 6.28)
          this.context.setLineDash([10,20])
Y
yamila 已提交
430 431
          this.context.lineDashOffset = 10.0
          this.context.stroke()
Z
zengyawen 已提交
432 433 434 435 436 437 438 439
      })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
440 441 442 443 444
![zh-cn_image_0000001194352434](figures/zh-cn_image_0000001194352434.png)


### globalCompositeOperation

H
geshi  
HelloCrease 已提交
445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460
| 名称               | 描述                       |
| ---------------- | ------------------------ |
| source-over      | 在现有绘制内容上显示新绘制内容,属于默认值。   |
| source-atop      | 在现有绘制内容顶部显示新绘制内容。        |
| source-in        | 在现有绘制内容中显示新绘制内容。         |
| source-out       | 在现有绘制内容之外显示新绘制内容。        |
| destination-over | 在新绘制内容上方显示现有绘制内容。        |
| destination-atop | 在新绘制内容顶部显示现有绘制内容。        |
| destination-in   | 在新绘制内容中显示现有绘制内容。         |
| destination-out  | 在新绘制内容外显示现有绘制内容。         |
| lighter          | 显示新绘制内容和现有绘制内容。          |
| copy             | 显示新绘制内容而忽略现有绘制内容。        |
| xor              | 使用异或操作对新绘制内容与现有绘制内容进行融合。 |

```ts
// xxx.ets
Z
zengyawen 已提交
461 462 463
@Entry
@Component
struct GlobalCompositeOperation {
Y
yamila 已提交
464 465
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491
  
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
          this.context.fillStyle = 'rgb(255,0,0)'
          this.context.fillRect(20, 20, 50, 50)
          this.context.globalCompositeOperation = 'source-over'
          this.context.fillStyle = 'rgb(0,0,255)'
          this.context.fillRect(50, 50, 50, 50)
          this.context.fillStyle = 'rgb(255,0,0)'
          this.context.fillRect(120, 20, 50, 50)
          this.context.globalCompositeOperation = 'destination-over'
          this.context.fillStyle = 'rgb(0,0,255)'
          this.context.fillRect(150, 50, 50, 50)
      })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
492
![zh-cn_image_0000001238952375](figures/zh-cn_image_0000001238952375.png)
Z
zengyawen 已提交
493

Z
zengyawen 已提交
494 495

### shadowBlur
Z
zengyawen 已提交
496

H
geshi  
HelloCrease 已提交
497 498
```ts
// xxx.ets
Z
zengyawen 已提交
499 500 501
@Entry
@Component
struct ShadowBlur {
Y
yamila 已提交
502 503
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523
  
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
          this.context.shadowBlur = 30
          this.context.shadowColor = 'rgb(0,0,0)'
          this.context.fillStyle = 'rgb(255,0,0)'
          this.context.fillRect(20, 20, 100, 80)
      })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
524 525
![zh-cn_image_0000001194032456](figures/zh-cn_image_0000001194032456.png)

Z
zengyawen 已提交
526

Z
zengyawen 已提交
527
### shadowColor
Z
zengyawen 已提交
528

H
geshi  
HelloCrease 已提交
529 530
```ts
// xxx.ets
Z
zengyawen 已提交
531 532 533
@Entry
@Component
struct ShadowColor {
Y
yamila 已提交
534 535
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555
  
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
          this.context.shadowBlur = 30
          this.context.shadowColor = 'rgb(0,0,255)'
          this.context.fillStyle = 'rgb(255,0,0)'
          this.context.fillRect(30, 30, 100, 100)
      })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
556
![zh-cn_image_0000001239032411](figures/zh-cn_image_0000001239032411.png)
Z
zengyawen 已提交
557

Z
zengyawen 已提交
558 559

### shadowOffsetX
Z
zengyawen 已提交
560

H
geshi  
HelloCrease 已提交
561 562
```ts
// xxx.ets
Z
zengyawen 已提交
563 564 565
@Entry
@Component
struct ShadowOffsetX {
Y
yamila 已提交
566 567
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588
  
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
          this.context.shadowBlur = 10
          this.context.shadowOffsetX = 20
          this.context.shadowColor = 'rgb(0,0,0)'
          this.context.fillStyle = 'rgb(255,0,0)'
          this.context.fillRect(20, 20, 100, 80)
      })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
589 590
![zh-cn_image_0000001193872490](figures/zh-cn_image_0000001193872490.png)

Z
zengyawen 已提交
591

Z
zengyawen 已提交
592
### shadowOffsetY
Z
zengyawen 已提交
593

H
geshi  
HelloCrease 已提交
594 595
```ts
// xxx.ets
Z
zengyawen 已提交
596 597 598
@Entry
@Component
struct ShadowOffsetY {
Y
yamila 已提交
599 600
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
          this.context.shadowBlur = 10
          this.context.shadowOffsetY = 20
          this.context.shadowColor = 'rgb(0,0,0)'
          this.context.fillStyle = 'rgb(255,0,0)'
          this.context.fillRect(30, 30, 100, 100)
      })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
621
![zh-cn_image_0000001238832387](figures/zh-cn_image_0000001238832387.png)
Z
zengyawen 已提交
622

Z
zengyawen 已提交
623 624

### imageSmoothingEnabled
Z
zengyawen 已提交
625

H
geshi  
HelloCrease 已提交
626 627
```ts
// xxx.ets
Z
zengyawen 已提交
628 629 630
@Entry
@Component
struct ImageSmoothingEnabled {
Y
yamila 已提交
631 632 633
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg")
Z
zengyawen 已提交
634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651
  
  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
          this.context.imageSmoothingEnabled = false
          this.context.drawImage( this.img,0,0,400,200)
      })
    }
    .width('100%')
    .height('100%')
  }
}
```

Z
zengyawen 已提交
652 653
![zh-cn_image_0000001238712415](figures/zh-cn_image_0000001238712415.png)

Z
zengyawen 已提交
654

Z
zengyawen 已提交
655
## 方法
Z
zengyawen 已提交
656 657


Z
zengyawen 已提交
658 659 660
### fillRect

fillRect(x: number, y: number, w: number, h: number): void
Z
zengyawen 已提交
661 662 663

填充一个矩形。

Z
zhongjianfei 已提交
664 665
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
666 667
**参数:**

H
HelloCrease 已提交
668 669 670 671 672 673
| 参数     | 类型     | 必填   | 默认值  | 说明            |
| ------ | ------ | ---- | ---- | ------------- |
| x      | number | 是    | 0    | 指定矩形左上角点的x坐标。 |
| y      | number | 是    | 0    | 指定矩形左上角点的y坐标。 |
| width  | number | 是    | 0    | 指定矩形的宽度。      |
| height | number | 是    | 0    | 指定矩形的高度。      |
Z
zengyawen 已提交
674

L
lanyill 已提交
675
**示例:**
Z
zengyawen 已提交
676

H
geshi  
HelloCrease 已提交
677 678
  ```ts
  // xxx.ets
Z
zengyawen 已提交
679 680 681
  @Entry
  @Component
  struct FillRect {
Y
yamila 已提交
682 683
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
684 685 686 687 688 689 690 691
    
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
L
lanyill 已提交
692
            this.context.fillRect(30,30,100,100)
Z
zengyawen 已提交
693 694 695 696
         })
        }
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
697
    }
Z
zengyawen 已提交
698 699
  }
  ```
Z
zengyawen 已提交
700

Z
zengyawen 已提交
701
  ![zh-cn_image_0000001194192436](figures/zh-cn_image_0000001194192436.png)
Z
zengyawen 已提交
702 703


Z
zengyawen 已提交
704
### strokeRect
Z
zengyawen 已提交
705

Z
zengyawen 已提交
706
strokeRect(x: number, y: number, w: number, h: number): void
Z
zengyawen 已提交
707 708 709

绘制具有边框的矩形,矩形内部不填充。

Z
zhongjianfei 已提交
710 711
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
712 713
**参数:**

H
HelloCrease 已提交
714 715 716 717 718 719
| 参数   | 类型     | 必填   | 默认值  | 说明           |
| ---- | ------ | ---- | ---- | ------------ |
| x    | number | 是    | 0    | 指定矩形的左上角x坐标。 |
| y    | number | 是    | 0    | 指定矩形的左上角y坐标。 |
| w    | number | 是    | 0    | 指定矩形的宽度。     |
| h    | number | 是    | 0    | 指定矩形的高度。     |
L
lanyill 已提交
720 721

**示例:**
Z
zengyawen 已提交
722

H
geshi  
HelloCrease 已提交
723 724
  ```ts
  // xxx.ets
Z
zengyawen 已提交
725 726 727
  @Entry
  @Component
  struct StrokeRect {
Y
yamila 已提交
728 729
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
L
lanyill 已提交
730

Z
zengyawen 已提交
731 732 733 734 735 736 737 738 739
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.strokeRect(30, 30, 200, 150)
        })
Z
zengyawen 已提交
740
      }
Z
zengyawen 已提交
741 742
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
743
    }
Z
zengyawen 已提交
744 745
  }
  ```
Z
zengyawen 已提交
746

Z
zengyawen 已提交
747
  ![zh-cn_image_0000001194352436](figures/zh-cn_image_0000001194352436.png)
Z
zengyawen 已提交
748 749


Z
zengyawen 已提交
750
### clearRect
Z
zengyawen 已提交
751

Z
zengyawen 已提交
752
clearRect(x: number, y: number, w: number, h: number): void
Z
zengyawen 已提交
753 754 755

删除指定区域内的绘制内容。

Z
zhongjianfei 已提交
756 757
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
758 759
**参数:**

H
HelloCrease 已提交
760 761 762 763 764 765
| 参数   | 类型     | 必填   | 默认值  | 描述            |
| ---- | ------ | ---- | ---- | ------------- |
| x    | number | 是    | 0    | 指定矩形上的左上角x坐标。 |
| y    | number | 是    | 0    | 指定矩形上的左上角y坐标。 |
| w    | number | 是    | 0    | 指定矩形的宽度。      |
| h    | number | 是    | 0    | 指定矩形的高度。      |
L
lanyill 已提交
766 767

**示例:**
Z
zengyawen 已提交
768

H
geshi  
HelloCrease 已提交
769 770
  ```ts
  // xxx.ets
Z
zengyawen 已提交
771 772 773
  @Entry
  @Component
  struct ClearRect {
Y
yamila 已提交
774 775
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
L
lanyill 已提交
776

Z
zengyawen 已提交
777 778 779 780 781
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
782
          .backgroundColor('#ffff00')
Z
zengyawen 已提交
783 784
          .onReady(() =>{
            this.context.fillStyle = 'rgb(0,0,255)'
L
lanyill 已提交
785 786
            this.context.fillRect(20,20,200,200)
            this.context.clearRect(30,30,150,100)
Z
zengyawen 已提交
787
        })
Z
zengyawen 已提交
788
      }
Z
zengyawen 已提交
789 790
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
791
    }
Z
zengyawen 已提交
792 793
  }
  ```
Z
zengyawen 已提交
794

Z
zengyawen 已提交
795
  ![zh-cn_image_0000001238952377](figures/zh-cn_image_0000001238952377.png)
Z
zengyawen 已提交
796 797


Z
zengyawen 已提交
798
### fillText
Z
zengyawen 已提交
799

L
lanyill 已提交
800
fillText(text: string, x: number, y: number, maxWidth?: number): void
Z
zengyawen 已提交
801 802 803

绘制填充类文本。

Z
zhongjianfei 已提交
804 805
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
806 807
**参数:**

Y
yamila 已提交
808 809 810 811 812 813
| 参数     | 类型   | 必填 | 默认值 | 说明                          |
| -------- | ------ | ---- | ------ | ----------------------------- |
| text     | string | 是   | ''     | 需要绘制的文本内容。          |
| x        | number | 是   | 0      | 需要绘制的文本的左下角x坐标。 |
| y        | number | 是   | 0      | 需要绘制的文本的左下角y坐标。 |
| maxWidth | number | 否   | -      | 指定文本允许的最大宽度。      |
L
lanyill 已提交
814 815

**示例:**
Z
zengyawen 已提交
816

H
geshi  
HelloCrease 已提交
817 818
  ```ts
  // xxx.ets
Z
zengyawen 已提交
819 820 821
  @Entry
  @Component
  struct FillText {
Y
yamila 已提交
822 823
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
L
lanyill 已提交
824

Z
zengyawen 已提交
825 826 827 828 829 830 831 832 833 834
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.font = '30px sans-serif'
            this.context.fillText("Hello World!", 20, 100)
        })
Z
zengyawen 已提交
835
      }
Z
zengyawen 已提交
836 837
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
838
    }
Z
zengyawen 已提交
839 840
  }
  ```
Z
zengyawen 已提交
841

Z
zengyawen 已提交
842
  ![zh-cn_image_0000001194032458](figures/zh-cn_image_0000001194032458.png)
Z
zengyawen 已提交
843 844


Z
zengyawen 已提交
845
### strokeText
Z
zengyawen 已提交
846

L
lanyill 已提交
847
strokeText(text: string, x: number, y: number, maxWidth?:number): void
Z
zengyawen 已提交
848 849 850

绘制描边类文本。

Z
zhongjianfei 已提交
851 852
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
853 854
**参数:**

Y
yamila 已提交
855 856 857 858 859 860
| 参数     | 类型   | 必填 | 默认值 | 描述                          |
| -------- | ------ | ---- | ------ | ----------------------------- |
| text     | string | 是   | ''     | 需要绘制的文本内容。          |
| x        | number | 是   | 0      | 需要绘制的文本的左下角x坐标。 |
| y        | number | 是   | 0      | 需要绘制的文本的左下角y坐标。 |
| maxWidth | number | 否   | -      | 需要绘制的文本的最大宽度 。   |
L
lanyill 已提交
861 862

**示例:**
Z
zengyawen 已提交
863

H
geshi  
HelloCrease 已提交
864 865
  ```ts
  // xxx.ets
Z
zengyawen 已提交
866 867 868
  @Entry
  @Component
  struct StrokeText {
Y
yamila 已提交
869 870
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
L
lanyill 已提交
871

Z
zengyawen 已提交
872 873 874 875 876 877 878 879 880 881
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.font = '55px sans-serif'
            this.context.strokeText("Hello World!", 20, 60)
        })
Z
zengyawen 已提交
882
      }
Z
zengyawen 已提交
883 884
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
885
    }
Z
zengyawen 已提交
886 887
  }
  ```
Z
zengyawen 已提交
888

Z
zengyawen 已提交
889
  ![zh-cn_image_0000001239032413](figures/zh-cn_image_0000001239032413.png)
Z
zengyawen 已提交
890 891


Z
zengyawen 已提交
892
### measureText
Z
zengyawen 已提交
893

Z
zengyawen 已提交
894
measureText(text: string): TextMetrics
Z
zengyawen 已提交
895 896 897

该方法返回一个文本测算的对象,通过该对象可以获取指定文本的宽度值。

Z
zhongjianfei 已提交
898 899
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
900 901
**参数:**

Y
yamila 已提交
902 903 904
| 参数 | 类型   | 必填 | 默认值 | 说明                 |
| ---- | ------ | ---- | ------ | -------------------- |
| text | string | 是   | ''     | 需要进行测量的文本。 |
Z
zengyawen 已提交
905

L
lanyill 已提交
906
**返回值:**
Z
zengyawen 已提交
907

Z
zhongjianfei 已提交
908 909 910
| 类型        | 说明                                                         |
| ----------- | ------------------------------------------------------------ |
| TextMetrics | 文本的尺寸信息。<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 |
Z
zengyawen 已提交
911

L
lanyill 已提交
912 913
**TextMetrics类型描述:**

H
HelloCrease 已提交
914 915 916 917 918 919 920 921 922 923 924 925 926 927 928
| 属性                       | 类型     | 描述                                       |
| ------------------------ | ------ | ---------------------------------------- |
| width                    | number | 字符串的宽度。                                  |
| height                   | number | 字符串的高度。                                  |
| actualBoundingBoxAscent  | number | 从CanvasRenderingContext2D.textBaseline 属性标明的水平线到渲染文本的矩形边界顶部的距离,当前值为0。 |
| actualBoundingBoxDescent | number | 从CanvasRenderingContext2D.textBaseline 属性标明的水平线到渲染文本的矩形边界底部的距离,当前值为0。 |
| actualBoundingBoxLeft    | number | 平行于基线,从CanvasRenderingContext2D.textAlign 属性确定的对齐点到文本矩形边界左侧的距离,当前值为0。 |
| actualBoundingBoxRight   | number | 平行于基线,从CanvasRenderingContext2D.textAlign 属性确定的对齐点到文本矩形边界右侧的距离,当前值为0。 |
| alphabeticBaseline       | number | 从CanvasRenderingContext2D.textBaseline 属性标明的水平线到线框的 alphabetic 基线的距离,当前值为0。 |
| emHeightAscent           | number | 从CanvasRenderingContext2D.textBaseline 属性标明的水平线到线框中 em 方块顶部的距离,当前值为0。 |
| emHeightDescent          | number | 从CanvasRenderingContext2D.textBaseline 属性标明的水平线到线框中 em 方块底部的距离,当前值为0。 |
| fontBoundingBoxAscent    | number | 从CanvasRenderingContext2D.textBaseline 属性标明的水平线到渲染文本的所有字体的矩形最高边界顶部的距离,当前值为0。 |
| fontBoundingBoxDescent   | number | 从CanvasRenderingContext2D.textBaseline 属性标明的水平线到渲染文本的所有字体的矩形边界最底部的距离,当前值为0。 |
| hangingBaseline          | number | 从CanvasRenderingContext2D.textBaseline 属性标明的水平线到线框的 hanging 基线的距离,当前值为0。 |
| ideographicBaseline      | number | 从CanvasRenderingContext2D.textBaseline 属性标明的水平线到线框的 ideographic 基线的距离,当前值为0。 |
L
lanyill 已提交
929 930 931 932 933

  


**示例:**
Z
zengyawen 已提交
934

H
geshi  
HelloCrease 已提交
935 936
  ```ts
  // xxx.ets
Z
zengyawen 已提交
937 938 939
  @Entry
  @Component
  struct MeasureText {
Y
yamila 已提交
940 941
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
L
lanyill 已提交
942

Z
zengyawen 已提交
943 944 945 946 947 948 949 950 951 952 953
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.font = '50px sans-serif'
            this.context.fillText("Hello World!", 20, 100)
            this.context.fillText("width:" + this.context.measureText("Hello World!").width, 20, 200)
        })
Z
zengyawen 已提交
954
      }
Z
zengyawen 已提交
955 956
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
957
    }
Z
zengyawen 已提交
958 959
  }
  ```
Z
zengyawen 已提交
960

Z
zengyawen 已提交
961
  ![zh-cn_image_0000001193872492](figures/zh-cn_image_0000001193872492.png)
Z
zengyawen 已提交
962 963


Z
zengyawen 已提交
964
### stroke
Z
zengyawen 已提交
965

Z
zengyawen 已提交
966
stroke(path?: Path2D): void
Z
zengyawen 已提交
967 968 969

进行边框绘制操作。

Z
zhongjianfei 已提交
970 971
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
972 973
**参数:**

H
HelloCrease 已提交
974 975 976
| 参数   | 类型                                       | 必填   | 默认值  | 描述           |
| ---- | ---------------------------------------- | ---- | ---- | ------------ |
| path | [Path2D](ts-components-canvas-path2d.md) | 否    | null | 需要绘制的Path2D。 |
Z
zengyawen 已提交
977

L
lanyill 已提交
978
**示例:**
Z
zengyawen 已提交
979

H
geshi  
HelloCrease 已提交
980 981
  ```ts
  // xxx.ets
Z
zengyawen 已提交
982 983 984
  @Entry
  @Component
  struct Stroke {
Y
yamila 已提交
985 986
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
987

Z
zengyawen 已提交
988 989 990 991 992 993 994 995 996
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.moveTo(25, 25)
            this.context.lineTo(25, 105)
L
lanyill 已提交
997 998
            this.context.lineTo(75, 105)
            this.context.lineTo(75, 25)
Z
zengyawen 已提交
999 1000 1001
            this.context.strokeStyle = 'rgb(0,0,255)'
            this.context.stroke()
          })
Z
zengyawen 已提交
1002
      }
Z
zengyawen 已提交
1003 1004
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1005
    }
Z
zengyawen 已提交
1006 1007
  }
  ```
Z
zengyawen 已提交
1008

Z
zengyawen 已提交
1009
  ![zh-cn_image_0000001238832389](figures/zh-cn_image_0000001238832389.png)
Z
zengyawen 已提交
1010 1011


Z
zengyawen 已提交
1012
### beginPath
Z
zengyawen 已提交
1013

Z
zengyawen 已提交
1014
beginPath(): void
Z
zengyawen 已提交
1015 1016 1017

创建一个新的绘制路径。

Z
zhongjianfei 已提交
1018 1019
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1020 1021
**示例:**

H
geshi  
HelloCrease 已提交
1022 1023
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1024 1025 1026
  @Entry
  @Component
  struct BeginPath {
Y
yamila 已提交
1027 1028
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
1029

Z
zengyawen 已提交
1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.beginPath()
            this.context.lineWidth = 6
            this.context.strokeStyle = '#0000ff'
            this.context.moveTo(15, 80)
            this.context.lineTo(280, 160)
            this.context.stroke()
          })
Z
zengyawen 已提交
1044
      }
Z
zengyawen 已提交
1045 1046
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1047
    }
Z
zengyawen 已提交
1048 1049
  }
  ```
Z
zengyawen 已提交
1050

Z
zengyawen 已提交
1051
  ![zh-cn_image_0000001238712417](figures/zh-cn_image_0000001238712417.png)
Z
zengyawen 已提交
1052 1053


Z
zengyawen 已提交
1054
### moveTo
Z
zengyawen 已提交
1055

Z
zengyawen 已提交
1056
moveTo(x: number, y: number): void
Z
zengyawen 已提交
1057 1058 1059

路径从当前点移动到指定点。

Z
zhongjianfei 已提交
1060 1061
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1062 1063
**参数:**

H
HelloCrease 已提交
1064 1065 1066 1067
| 参数   | 类型     | 必填   | 默认值  | 说明        |
| ---- | ------ | ---- | ---- | --------- |
| x    | number | 是    | 0    | 指定位置的x坐标。 |
| y    | number | 是    | 0    | 指定位置的y坐标。 |
Z
zengyawen 已提交
1068

L
lanyill 已提交
1069
**示例:**
Z
zengyawen 已提交
1070

H
geshi  
HelloCrease 已提交
1071 1072
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1073 1074 1075
  @Entry
  @Component
  struct MoveTo {
Y
yamila 已提交
1076 1077
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
1078

Z
zengyawen 已提交
1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.beginPath()
            this.context.moveTo(10, 10)
            this.context.lineTo(280, 160)
            this.context.stroke()
          })
Z
zengyawen 已提交
1091
      }
Z
zengyawen 已提交
1092 1093
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1094
    }
Z
zengyawen 已提交
1095 1096
  }
  ```
Z
zengyawen 已提交
1097

Z
zengyawen 已提交
1098
  ![zh-cn_image_0000001194192438](figures/zh-cn_image_0000001194192438.png)
Z
zengyawen 已提交
1099 1100


Z
zengyawen 已提交
1101
### lineTo
Z
zengyawen 已提交
1102

Z
zengyawen 已提交
1103
lineTo(x: number, y: number): void
Z
zengyawen 已提交
1104 1105 1106

从当前点到指定点进行路径连接。

Z
zhongjianfei 已提交
1107 1108
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1109 1110
**参数:**

H
HelloCrease 已提交
1111 1112 1113 1114
| 参数   | 类型     | 必填   | 默认值  | 描述        |
| ---- | ------ | ---- | ---- | --------- |
| x    | number | 是    | 0    | 指定位置的x坐标。 |
| y    | number | 是    | 0    | 指定位置的y坐标。 |
Z
zengyawen 已提交
1115

L
lanyill 已提交
1116
**示例:**
Z
zengyawen 已提交
1117

H
geshi  
HelloCrease 已提交
1118 1119
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1120 1121 1122
  @Entry
  @Component
  struct LineTo {
Y
yamila 已提交
1123 1124
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
1125

Z
zengyawen 已提交
1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.beginPath()
            this.context.moveTo(10, 10)
            this.context.lineTo(280, 160)
            this.context.stroke()
          })
Z
zengyawen 已提交
1138
      }
Z
zengyawen 已提交
1139 1140
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1141
    }
Z
zengyawen 已提交
1142 1143
  }
  ```
Z
zengyawen 已提交
1144

Z
zengyawen 已提交
1145
  ![zh-cn_image_0000001194352438](figures/zh-cn_image_0000001194352438.png)
Z
zengyawen 已提交
1146 1147


Z
zengyawen 已提交
1148
### closePath
Z
zengyawen 已提交
1149

Z
zengyawen 已提交
1150
closePath(): void
Z
zengyawen 已提交
1151 1152 1153

结束当前路径形成一个封闭路径。

Z
zhongjianfei 已提交
1154 1155
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1156 1157
**示例:**

H
geshi  
HelloCrease 已提交
1158 1159
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1160 1161 1162
  @Entry
  @Component
  struct ClosePath {
Y
yamila 已提交
1163 1164
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
1165

Z
zengyawen 已提交
1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
              this.context.beginPath()
              this.context.moveTo(30, 30)
              this.context.lineTo(110, 30)
              this.context.lineTo(70, 90)
              this.context.closePath()
              this.context.stroke()
          })
Z
zengyawen 已提交
1180
      }
Z
zengyawen 已提交
1181 1182
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1183
    }
Z
zengyawen 已提交
1184 1185
  }
  ```
Z
zengyawen 已提交
1186

Z
zengyawen 已提交
1187
  ![zh-cn_image_0000001238952379](figures/zh-cn_image_0000001238952379.png)
Z
zengyawen 已提交
1188 1189


Z
zengyawen 已提交
1190
### createPattern
Z
zengyawen 已提交
1191

L
lanyill 已提交
1192
createPattern(image: ImageBitmap, repetition: string | null): CanvasPattern | null
Z
zengyawen 已提交
1193 1194 1195

通过指定图像和重复方式创建图片填充的模板。

Z
zhongjianfei 已提交
1196 1197
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1198 1199
**参数:**

Y
yamila 已提交
1200 1201 1202
| 参数       | 类型                                               | 必填 | 描述                                                         |
| ---------- | -------------------------------------------------- | ---- | ------------------------------------------------------------ |
| image      | [ImageBitmap](ts-components-canvas-imagebitmap.md) | 是   | 图源对象,具体参考ImageBitmap对象。                          |
1203
| repetition | string                                             | 是   | 设置图像重复的方式,取值为:'repeat'、'repeat-x'、&nbsp'repeat-y'、'no-repeat'、'clamp'、'mirror'。<br/>默认值:'' |
Z
zengyawen 已提交
1204

L
lanyill 已提交
1205 1206
**返回值:**

H
HelloCrease 已提交
1207 1208 1209
| 类型                              | 说明                      |
| ------------------------------- | ----------------------- |
| [CanvasPattern](#canvaspattern) | 通过指定图像和重复方式创建图片填充的模板对象。 |
L
lanyill 已提交
1210 1211

**示例:**
Z
zengyawen 已提交
1212

H
geshi  
HelloCrease 已提交
1213 1214
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1215 1216 1217
  @Entry
  @Component
  struct CreatePattern {
Y
yamila 已提交
1218 1219 1220
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
    private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg")
H
geshi  
HelloCrease 已提交
1221

Z
zengyawen 已提交
1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            var pattern = this.context.createPattern(this.img, 'repeat')
            this.context.fillStyle = pattern
            this.context.fillRect(0, 0, 200, 200)
          })
Z
zengyawen 已提交
1233
      }
Z
zengyawen 已提交
1234 1235
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1236
    }
Z
zengyawen 已提交
1237 1238
  }
  ```
Z
zengyawen 已提交
1239

Z
zengyawen 已提交
1240
  ![zh-cn_image_0000001194032460](figures/zh-cn_image_0000001194032460.png)
Z
zengyawen 已提交
1241 1242


Z
zengyawen 已提交
1243
### bezierCurveTo
Z
zengyawen 已提交
1244

Z
zengyawen 已提交
1245
bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void
Z
zengyawen 已提交
1246 1247 1248

创建三次贝赛尔曲线的路径。

Z
zhongjianfei 已提交
1249 1250
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1251 1252
**参数:**

H
HelloCrease 已提交
1253 1254 1255 1256 1257 1258 1259 1260
| 参数   | 类型     | 必填   | 默认值  | 描述             |
| ---- | ------ | ---- | ---- | -------------- |
| cp1x | number | 是    | 0    | 第一个贝塞尔参数的x坐标值。 |
| cp1y | number | 是    | 0    | 第一个贝塞尔参数的y坐标值。 |
| cp2x | number | 是    | 0    | 第二个贝塞尔参数的x坐标值。 |
| cp2y | number | 是    | 0    | 第二个贝塞尔参数的y坐标值。 |
| x    | number | 是    | 0    | 路径结束时的x坐标值。    |
| y    | number | 是    | 0    | 路径结束时的y坐标值。    |
Z
zengyawen 已提交
1261

L
lanyill 已提交
1262 1263
**示例:**

H
geshi  
HelloCrease 已提交
1264 1265
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1266 1267 1268
  @Entry
  @Component
  struct BezierCurveTo {
Y
yamila 已提交
1269 1270
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
1271

Z
zengyawen 已提交
1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.beginPath()
            this.context.moveTo(10, 10)
            this.context.bezierCurveTo(20, 100, 200, 100, 200, 20)
            this.context.stroke()
          })
Z
zengyawen 已提交
1284
      }
Z
zengyawen 已提交
1285 1286
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1287
    }
Z
zengyawen 已提交
1288 1289
  }
  ```
Z
zengyawen 已提交
1290

Z
zengyawen 已提交
1291
  ![zh-cn_image_0000001239032415](figures/zh-cn_image_0000001239032415.png)
Z
zengyawen 已提交
1292 1293


Z
zengyawen 已提交
1294
### quadraticCurveTo
Z
zengyawen 已提交
1295

Z
zengyawen 已提交
1296
quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void
Z
zengyawen 已提交
1297 1298 1299

创建二次贝赛尔曲线的路径。

Z
zhongjianfei 已提交
1300 1301
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1302 1303
**参数:**

H
HelloCrease 已提交
1304 1305 1306 1307 1308 1309
| 参数   | 类型     | 必填   | 默认值  | 描述          |
| ---- | ------ | ---- | ---- | ----------- |
| cpx  | number | 是    | 0    | 贝塞尔参数的x坐标值。 |
| cpy  | number | 是    | 0    | 贝塞尔参数的y坐标值。 |
| x    | number | 是    | 0    | 路径结束时的x坐标值。 |
| y    | number | 是    | 0    | 路径结束时的y坐标值。 |
Z
zengyawen 已提交
1310

L
lanyill 已提交
1311
**示例:**
Z
zengyawen 已提交
1312

H
geshi  
HelloCrease 已提交
1313 1314
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1315 1316 1317
  @Entry
  @Component
  struct QuadraticCurveTo {
Y
yamila 已提交
1318 1319
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
L
lanyill 已提交
1320

Z
zengyawen 已提交
1321 1322 1323 1324 1325 1326 1327
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
Y
yamila 已提交
1328 1329 1330 1331
            this.context.beginPath()
            this.context.moveTo(20, 20)
            this.context.quadraticCurveTo(100, 100, 200, 20)
            this.context.stroke()
Z
zengyawen 已提交
1332
        })
Z
zengyawen 已提交
1333
      }
Z
zengyawen 已提交
1334 1335
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1336
    }
Z
zengyawen 已提交
1337 1338
  }
  ```
Z
zengyawen 已提交
1339

Z
zengyawen 已提交
1340
  ![zh-cn_image_0000001193872494](figures/zh-cn_image_0000001193872494.png)
Z
zengyawen 已提交
1341 1342


Z
zengyawen 已提交
1343
### arc
Z
zengyawen 已提交
1344

L
lanyill 已提交
1345
arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void
Z
zengyawen 已提交
1346 1347 1348

绘制弧线路径。

Z
zhongjianfei 已提交
1349 1350
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1351 1352
**参数:**

H
HelloCrease 已提交
1353 1354 1355 1356 1357 1358 1359 1360
| 参数               | 类型      | 必填   | 默认值   | 描述         |
| ---------------- | ------- | ---- | ----- | ---------- |
| x                | number  | 是    | 0     | 弧线圆心的x坐标值。 |
| y                | number  | 是    | 0     | 弧线圆心的y坐标值。 |
| radius           | number  | 是    | 0     | 弧线的圆半径。    |
| startAngle       | number  | 是    | 0     | 弧线的起始弧度。   |
| endAngle         | number  | 是    | 0     | 弧线的终止弧度。   |
| counterclockwise | boolean | 否    | false | 是否逆时针绘制圆弧。 |
L
lanyill 已提交
1361 1362

**示例:**
Z
zengyawen 已提交
1363

H
geshi  
HelloCrease 已提交
1364 1365
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1366 1367 1368
  @Entry
  @Component
  struct Arc {
Y
yamila 已提交
1369 1370
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
1371

Z
zengyawen 已提交
1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.beginPath()
            this.context.arc(100, 75, 50, 0, 6.28)
            this.context.stroke()
          })
Z
zengyawen 已提交
1383
      }
Z
zengyawen 已提交
1384 1385
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1386
    }
Z
zengyawen 已提交
1387 1388
  }
  ```
Z
zengyawen 已提交
1389

Z
zengyawen 已提交
1390
  ![zh-cn_image_0000001238832391](figures/zh-cn_image_0000001238832391.png)
Z
zengyawen 已提交
1391 1392


Z
zengyawen 已提交
1393
### arcTo
Z
zengyawen 已提交
1394

Z
zengyawen 已提交
1395
arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void
Z
zengyawen 已提交
1396 1397 1398

依据圆弧经过的点和圆弧半径创建圆弧路径。

Z
zhongjianfei 已提交
1399 1400
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1401 1402
**参数:**

H
HelloCrease 已提交
1403 1404 1405 1406 1407 1408 1409
| 参数     | 类型     | 必填   | 默认值  | 描述              |
| ------ | ------ | ---- | ---- | --------------- |
| x1     | number | 是    | 0    | 圆弧经过的第一个点的x坐标值。 |
| y1     | number | 是    | 0    | 圆弧经过的第一个点的y坐标值。 |
| x2     | number | 是    | 0    | 圆弧经过的第二个点的x坐标值。 |
| y2     | number | 是    | 0    | 圆弧经过的第二个点的y坐标值。 |
| radius | number | 是    | 0    | 圆弧的圆半径值。        |
Z
zengyawen 已提交
1410

L
lanyill 已提交
1411
**示例:**
Z
zengyawen 已提交
1412

H
geshi  
HelloCrease 已提交
1413 1414
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1415 1416 1417
  @Entry
  @Component
  struct ArcTo {
Y
yamila 已提交
1418 1419
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
1420

Z
zengyawen 已提交
1421 1422 1423 1424 1425 1426 1427
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
Y
yamila 已提交
1428 1429 1430
            this.context.moveTo(100, 20)
            this.context.arcTo(150, 20, 150, 70, 50)
            this.context.stroke()
Z
zengyawen 已提交
1431
          })
Z
zengyawen 已提交
1432
      }
Z
zengyawen 已提交
1433 1434
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1435
    }
Z
zengyawen 已提交
1436 1437
  }
  ```
Z
zengyawen 已提交
1438

Z
zengyawen 已提交
1439
  ![zh-cn_image_0000001238712419](figures/zh-cn_image_0000001238712419.png)
Z
zengyawen 已提交
1440 1441


Z
zengyawen 已提交
1442
### ellipse
Z
zengyawen 已提交
1443

L
lanyill 已提交
1444
ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void
Z
zengyawen 已提交
1445 1446 1447

在规定的矩形区域绘制一个椭圆。

Z
zhongjianfei 已提交
1448 1449
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1450 1451
**参数:**

H
HelloCrease 已提交
1452 1453 1454 1455 1456 1457 1458 1459 1460
| 参数               | 类型      | 必填   | 默认值   | 说明                |
| ---------------- | ------- | ---- | ----- | ----------------- |
| x                | number  | 是    | 0     | 椭圆圆心的x轴坐标。        |
| y                | number  | 是    | 0     | 椭圆圆心的y轴坐标。        |
| radiusX          | number  | 是    | 0     | 椭圆x轴的半径长度。        |
| radiusY          | number  | 是    | 0     | 椭圆y轴的半径长度。        |
| rotation         | number  | 是    | 0     | 椭圆的旋转角度,单位为弧度。    |
| startAngle       | number  | 是    | 0     | 椭圆绘制的起始点角度,以弧度表示。 |
| endAngle         | number  | 是    | 0     | 椭圆绘制的结束点角度,以弧度表示。 |
L
lanyill 已提交
1461
| counterclockwise | boolean | 否    | false | 是否以逆时针方向绘制椭圆。<br>true:逆时针方向绘制椭圆。<br>false:顺时针方向绘制椭圆。     |
Z
zengyawen 已提交
1462

L
lanyill 已提交
1463
**示例:**
Z
zengyawen 已提交
1464

H
geshi  
HelloCrease 已提交
1465 1466
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1467 1468 1469
  @Entry
  @Component
  struct CanvasExample {
Y
yamila 已提交
1470 1471
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
1472

Z
zengyawen 已提交
1473 1474 1475 1476 1477 1478 1479 1480
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.beginPath()
L
lanyill 已提交
1481
            this.context.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI * 2)
Z
zengyawen 已提交
1482 1483
            this.context.stroke()
          })
Z
zengyawen 已提交
1484
      }
Z
zengyawen 已提交
1485 1486
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1487
    }
Z
zengyawen 已提交
1488 1489
  }
  ```
H
geshi  
HelloCrease 已提交
1490

Z
zengyawen 已提交
1491
  ![zh-cn_image_0000001194192440](figures/zh-cn_image_0000001194192440.png)
Z
zengyawen 已提交
1492 1493


Z
zengyawen 已提交
1494
### rect
Z
zengyawen 已提交
1495

L
lanyill 已提交
1496
rect(x: number, y: number, w: number, h: number): void
Z
zengyawen 已提交
1497 1498 1499

创建矩形路径。

Z
zhongjianfei 已提交
1500 1501
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1502 1503
**参数:**

H
HelloCrease 已提交
1504 1505 1506 1507 1508 1509
| 参数   | 类型     | 必填   | 默认值  | 描述            |
| ---- | ------ | ---- | ---- | ------------- |
| x    | number | 是    | 0    | 指定矩形的左上角x坐标值。 |
| y    | number | 是    | 0    | 指定矩形的左上角y坐标值。 |
| w    | number | 是    | 0    | 指定矩形的宽度。      |
| h    | number | 是    | 0    | 指定矩形的高度。      |
L
lanyill 已提交
1510 1511

**示例:**
Z
zengyawen 已提交
1512

H
geshi  
HelloCrease 已提交
1513 1514
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1515 1516 1517
  @Entry
  @Component
  struct CanvasExample {
Y
yamila 已提交
1518 1519
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
1520

Z
zengyawen 已提交
1521 1522 1523 1524 1525 1526 1527 1528 1529 1530
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20)
            this.context.stroke()
          })
Z
zengyawen 已提交
1531
      }
Z
zengyawen 已提交
1532 1533
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1534
    }
Z
zengyawen 已提交
1535 1536
  }
  ```
Z
zengyawen 已提交
1537

Z
zengyawen 已提交
1538
  ![zh-cn_image_0000001194352440](figures/zh-cn_image_0000001194352440.png)
Z
zengyawen 已提交
1539 1540


Z
zengyawen 已提交
1541
### fill
Z
zengyawen 已提交
1542

L
lanyill 已提交
1543
fill(fillRule?: CanvasFillRule): void
Z
zengyawen 已提交
1544 1545 1546

对封闭路径进行填充。

Z
zhongjianfei 已提交
1547 1548
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1549 1550
**参数:** 

H
HelloCrease 已提交
1551 1552 1553
| 参数       | 类型             | 必填   | 默认值       | 描述                                       |
| -------- | -------------- | ---- | --------- | ---------------------------------------- |
| fillRule | CanvasFillRule | 否    | "nonzero" | 指定要填充对象的规则。<br/>可选参数为:"nonzero", "evenodd"。 |
L
lanyill 已提交
1554 1555 1556 1557


**示例:**   

H
geshi  
HelloCrease 已提交
1558 1559
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1560 1561 1562
  @Entry
  @Component
  struct Fill {
Y
yamila 已提交
1563 1564
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
1565

Z
zengyawen 已提交
1566 1567 1568 1569 1570 1571 1572 1573 1574 1575
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20)
            this.context.fill()
          })
Z
zengyawen 已提交
1576
      }
Z
zengyawen 已提交
1577 1578
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1579
    }
Z
zengyawen 已提交
1580 1581
  }
  ```
Z
zengyawen 已提交
1582

Z
zengyawen 已提交
1583
  ![zh-cn_image_0000001238952381](figures/zh-cn_image_0000001238952381.png)
Z
zengyawen 已提交
1584 1585


L
lanyill 已提交
1586 1587 1588 1589
fill(path: Path2D, fillRule?: CanvasFillRule): void

对封闭路径进行填充。

Z
zhongjianfei 已提交
1590 1591
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1592 1593
**参数:** 

H
HelloCrease 已提交
1594 1595 1596 1597
| 参数       | 类型             | 必填   | 默认值       | 描述                                       |
| -------- | -------------- | ---- | --------- | ---------------------------------------- |
| path     | Path2D         | 是    |           | Path2D填充路径。                              |
| fillRule | CanvasFillRule | 否    | "nonzero" | 指定要填充对象的规则。<br/>可选参数为:"nonzero", "evenodd"。 |
L
lanyill 已提交
1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616


**示例:**   

```ts
// xxx.ets
@Entry
@Component
struct Fill {
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)

  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
        .backgroundColor('#ffff00')
        .onReady(() =>{
Y
yamila 已提交
1617 1618 1619 1620 1621 1622 1623 1624
          let region = new Path2D()
          region.moveTo(30, 90)
          region.lineTo(110, 20)
          region.lineTo(240, 130)
          region.lineTo(60, 130)
          region.lineTo(190, 20)
          region.lineTo(270, 90)
          region.closePath()
L
lanyill 已提交
1625
          // Fill path
L
lanyill 已提交
1626
          this.context.fillStyle = '#00ff00'
Y
yamila 已提交
1627
          this.context.fill(region, "evenodd")
L
lanyill 已提交
1628 1629 1630 1631 1632 1633
        })
    }
    .width('100%')
    .height('100%')
  }
}
H
HelloCrease 已提交
1634
```
L
lanyill 已提交
1635 1636 1637 1638

 ![zh-cn_image_000000127777774](figures/zh-cn_image_000000127777774.png)


Z
zengyawen 已提交
1639
### clip
Z
zengyawen 已提交
1640

L
lanyill 已提交
1641
clip(fillRule?: CanvasFillRule): void
Z
zengyawen 已提交
1642 1643 1644

设置当前路径为剪切路径。

Z
zhongjianfei 已提交
1645 1646
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1647 1648
**参数:** 

H
HelloCrease 已提交
1649 1650 1651
| 参数       | 类型             | 必填   | 默认值       | 描述                                       |
| -------- | -------------- | ---- | --------- | ---------------------------------------- |
| fillRule | CanvasFillRule | 否    | "nonzero" | 指定要剪切对象的规则。<br/>可选参数为:"nonzero", "evenodd"。 |
L
lanyill 已提交
1652 1653 1654

**示例:** 

H
geshi  
HelloCrease 已提交
1655 1656
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1657 1658 1659
  @Entry
  @Component
  struct Clip {
Y
yamila 已提交
1660 1661
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
1662

Z
zengyawen 已提交
1663 1664 1665 1666 1667 1668 1669
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
L
lanyill 已提交
1670
            this.context.rect(0, 0, 100, 200)
Z
zengyawen 已提交
1671 1672 1673
            this.context.stroke()
            this.context.clip()
            this.context.fillStyle = "rgb(255,0,0)"
L
lanyill 已提交
1674
            this.context.fillRect(0, 0, 200, 200)
Z
zengyawen 已提交
1675
          })
Z
zengyawen 已提交
1676
      }
Z
zengyawen 已提交
1677 1678
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1679
    }
Z
zengyawen 已提交
1680 1681
  }
  ```
H
geshi  
HelloCrease 已提交
1682

Z
zengyawen 已提交
1683
  ![zh-cn_image_0000001194032462](figures/zh-cn_image_0000001194032462.png)
Z
zengyawen 已提交
1684 1685


L
lanyill 已提交
1686 1687
clip(path: Path2D, fillRule?: CanvasFillRule): void

L
lanyill 已提交
1688
设置当前路径为剪切路径
L
lanyill 已提交
1689

Z
zhongjianfei 已提交
1690 1691
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1692 1693
**参数:** 

H
HelloCrease 已提交
1694 1695 1696 1697 1698
| 参数       | 类型             | 必填   | 默认值       | 描述                                       |
| -------- | -------------- | ---- | --------- | ---------------------------------------- |
| path     | Path2D         | 是    | -         | Path2D剪切路径。                              |
| fillRule | CanvasFillRule | 否    | "nonzero" | 指定要剪切对象的规则。<br/>可选参数为:"nonzero", "evenodd"。 |

L
lanyill 已提交
1699

L
lanyill 已提交
1700 1701 1702 1703
**示例:** 

  ```ts
  // xxx.ets
L
lanyill 已提交
1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730
  @Entry
  @Component
  struct Clip {
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            let region = new Path2D()
            region.moveTo(30, 90)
            region.lineTo(110, 20)
            region.lineTo(240, 130)
            region.lineTo(60, 130)
            region.lineTo(190, 20)
            region.lineTo(270, 90)
            region.closePath()
            this.context.clip(region,"evenodd")
            this.context.fillStyle = "rgb(0,255,0)"
            this.context.fillRect(0, 0, this.context.width, this.context.height)
          })
      }
      .width('100%')
      .height('100%')
L
lanyill 已提交
1731 1732 1733 1734 1735 1736
    }
  }
  ```

  ![zh-cn_image_000000127777779](figures/zh-cn_image_000000127777779.png)

L
lanyill 已提交
1737 1738 1739 1740 1741 1742 1743

### filter

filter(filter: string): void

为Canvas图形设置各类滤镜效果。该接口为空接口。

Z
zhongjianfei 已提交
1744 1745
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1746 1747
**参数:**

H
HelloCrease 已提交
1748 1749 1750
| 参数     | 类型     | 必填   | 默认值  | 说明           |
| ------ | ------ | ---- | ---- | ------------ |
| filter | string | 是    | -    | 接受各类滤镜效果的函数。 |
L
lanyill 已提交
1751 1752 1753 1754 1755 1756 1757 1758


### getTransform

getTransform(): Matrix2D

获取当前被应用到上下文的转换矩阵。该接口为空接口。

Z
zhongjianfei 已提交
1759 1760
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1761 1762 1763 1764 1765 1766 1767

### resetTransform

resetTransform(): void

使用单位矩阵重新设置当前变形。该接口为空接口。

Z
zhongjianfei 已提交
1768 1769
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1770 1771 1772 1773 1774 1775 1776

### direction

direction(direction: CanvasDirection): void

绘制文本时,描述当前文本方向的属性。该接口为空接口。

Z
zhongjianfei 已提交
1777 1778
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1779

Z
zengyawen 已提交
1780
### rotate
Z
zengyawen 已提交
1781

L
lanyill 已提交
1782
rotate(angle: number): void
Z
zengyawen 已提交
1783 1784 1785

针对当前坐标轴进行顺时针旋转。

Z
zhongjianfei 已提交
1786 1787
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1788 1789
**参数:**

H
HelloCrease 已提交
1790 1791 1792
| 参数    | 类型     | 必填   | 默认值  | 描述                                       |
| ----- | ------ | ---- | ---- | ---------------------------------------- |
| angle | number | 是    | 0    | 设置顺时针旋转的弧度值,可以通过Math.PI&nbsp;/&nbsp;180将角度转换为弧度值。 |
L
lanyill 已提交
1793 1794

**示例:**
Z
zengyawen 已提交
1795

H
geshi  
HelloCrease 已提交
1796 1797
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1798 1799 1800
  @Entry
  @Component
  struct Rotate {
Y
yamila 已提交
1801 1802
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
1803

Z
zengyawen 已提交
1804 1805 1806 1807 1808 1809 1810
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
L
lanyill 已提交
1811
            this.context.rotate(45 * Math.PI / 180)
Z
zengyawen 已提交
1812 1813
            this.context.fillRect(70, 20, 50, 50)
          })
Z
zengyawen 已提交
1814
      }
Z
zengyawen 已提交
1815 1816
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1817
    }
Z
zengyawen 已提交
1818 1819
  }
  ```
Z
zengyawen 已提交
1820

Z
zengyawen 已提交
1821
  ![zh-cn_image_0000001239032417](figures/zh-cn_image_0000001239032417.png)
Z
zengyawen 已提交
1822 1823


Z
zengyawen 已提交
1824
### scale
Z
zengyawen 已提交
1825

Z
zengyawen 已提交
1826
scale(x: number, y: number): void
Z
zengyawen 已提交
1827 1828 1829

设置canvas画布的缩放变换属性,后续的绘制操作将按照缩放比例进行缩放。

Z
zhongjianfei 已提交
1830 1831
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1832 1833
**参数:**

H
HelloCrease 已提交
1834 1835 1836 1837
| 参数   | 类型     | 必填   | 默认值  | 描述          |
| ---- | ------ | ---- | ---- | ----------- |
| x    | number | 是    | 0    | 设置水平方向的缩放值。 |
| y    | number | 是    | 0    | 设置垂直方向的缩放值。 |
Z
zengyawen 已提交
1838

L
lanyill 已提交
1839
**示例:**
Z
zengyawen 已提交
1840

H
geshi  
HelloCrease 已提交
1841 1842
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1843 1844 1845
  @Entry
  @Component
  struct Scale {
Y
yamila 已提交
1846 1847
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
1848

Z
zengyawen 已提交
1849 1850 1851 1852 1853 1854 1855
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
L
lanyill 已提交
1856 1857
            this.context.lineWidth = 3
            this.context.strokeRect(30, 30, 50, 50)
Z
zengyawen 已提交
1858
            this.context.scale(2, 2) // Scale to 200%
L
lanyill 已提交
1859
            this.context.strokeRect(30, 30, 50, 50)
Z
zengyawen 已提交
1860
          })
Z
zengyawen 已提交
1861
      }
Z
zengyawen 已提交
1862 1863
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1864
    }
Z
zengyawen 已提交
1865 1866
  }
  ```
Z
zengyawen 已提交
1867

Z
zengyawen 已提交
1868
  ![zh-cn_image_0000001193872498](figures/zh-cn_image_0000001193872498.png)
Z
zengyawen 已提交
1869 1870


Z
zengyawen 已提交
1871
### transform
Z
zengyawen 已提交
1872

L
lanyill 已提交
1873
transform(a: number, b: number, c: number, d: number, e: number, f: number): void
Z
zengyawen 已提交
1874 1875 1876

transform方法对应一个变换矩阵,想对一个图形进行变化的时候,只要设置此变换矩阵相应的参数,对图形的各个定点的坐标分别乘以这个矩阵,就能得到新的定点的坐标。矩阵变换效果可叠加。

Z
zhongjianfei 已提交
1877 1878
从API version 9开始,该接口支持在ArkTS卡片中使用。

zyjhandsome's avatar
zyjhandsome 已提交
1879
> **说明:**
Z
zengyawen 已提交
1880
> 变换后的坐标计算方式(x和y为变换前坐标,x'和y'为变换后坐标):
H
geshi  
HelloCrease 已提交
1881
>
Z
zengyawen 已提交
1882
> - x' = scaleX \* x + skewY \* y + translateX
H
geshi  
HelloCrease 已提交
1883
>
Z
zengyawen 已提交
1884 1885
> - y' = skewX \* x + scaleY \* y + translateY

L
lanyill 已提交
1886 1887
**参数:**

H
HelloCrease 已提交
1888 1889 1890 1891 1892 1893 1894 1895
| 参数   | 类型     | 必填   | 默认值  | 描述                   |
| ---- | ------ | ---- | ---- | -------------------- |
| a    | number | 是    | 0    | scaleX: 指定水平缩放值。     |
| b    | number | 是    | 0    | skewX: 指定水平倾斜值。      |
| c    | number | 是    | 0    | skewY: 指定垂直倾斜值。      |
| d    | number | 是    | 0    | scaleY: 指定垂直缩放值。     |
| e    | number | 是    | 0    | translateX: 指定水平移动值。 |
| f    | number | 是    | 0    | translateY: 指定垂直移动值。 |
L
lanyill 已提交
1896 1897 1898

**示例:**

H
geshi  
HelloCrease 已提交
1899 1900
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1901 1902 1903
  @Entry
  @Component
  struct Transform {
Y
yamila 已提交
1904 1905
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
1906

Z
zengyawen 已提交
1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.fillStyle = 'rgb(0,0,0)'
            this.context.fillRect(0, 0, 100, 100)
            this.context.transform(1, 0.5, -0.5, 1, 10, 10)
            this.context.fillStyle = 'rgb(255,0,0)'
            this.context.fillRect(0, 0, 100, 100)
            this.context.transform(1, 0.5, -0.5, 1, 10, 10)
            this.context.fillStyle = 'rgb(0,0,255)'
            this.context.fillRect(0, 0, 100, 100)
          })
Z
zengyawen 已提交
1923
      }
Z
zengyawen 已提交
1924 1925
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1926
    }
Z
zengyawen 已提交
1927 1928 1929 1930 1931 1932 1933 1934
  }
  ```

  ![zh-cn_image_0000001238832395](figures/zh-cn_image_0000001238832395.png)


### setTransform

L
lanyill 已提交
1935
setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void
Z
zengyawen 已提交
1936

H
HelloCrease 已提交
1937
setTransform方法使用的参数和transform()方法相同,但setTransform()方法会重置现有的变换矩阵并创建新的变换矩阵。
Z
zengyawen 已提交
1938

Z
zhongjianfei 已提交
1939 1940
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1941 1942
**参数:**

H
HelloCrease 已提交
1943 1944 1945 1946 1947 1948 1949 1950
| 参数   | 类型     | 必填   | 默认值  | 描述                   |
| ---- | ------ | ---- | ---- | -------------------- |
| a    | number | 是    | 0    | scaleX: 指定水平缩放值。     |
| b    | number | 是    | 0    | skewX: 指定水平倾斜值。      |
| c    | number | 是    | 0    | skewY: 指定垂直倾斜值。      |
| d    | number | 是    | 0    | scaleY: 指定垂直缩放值。     |
| e    | number | 是    | 0    | translateX: 指定水平移动值。 |
| f    | number | 是    | 0    | translateY: 指定垂直移动值。 |
L
lanyill 已提交
1951 1952 1953

**示例:**

H
geshi  
HelloCrease 已提交
1954 1955
  ```ts
  // xxx.ets
Z
zengyawen 已提交
1956 1957 1958
  @Entry
  @Component
  struct SetTransform {
Y
yamila 已提交
1959 1960
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
1961

Z
zengyawen 已提交
1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.fillStyle = 'rgb(255,0,0)'
            this.context.fillRect(0, 0, 100, 100)
            this.context.setTransform(1,0.5, -0.5, 1, 10, 10)
            this.context.fillStyle = 'rgb(0,0,255)'
            this.context.fillRect(0, 0, 100, 100)
          })
Z
zengyawen 已提交
1975
      }
Z
zengyawen 已提交
1976 1977
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
1978
    }
Z
zengyawen 已提交
1979 1980
  }
  ```
Z
zengyawen 已提交
1981

Z
zengyawen 已提交
1982
  ![zh-cn_image_0000001238712421](figures/zh-cn_image_0000001238712421.png)
Z
zengyawen 已提交
1983 1984


L
lanyill 已提交
1985 1986 1987 1988
setTransform(transform?: Matrix2D): void

以Matrix2D对象为模板重置现有的变换矩阵并创建新的变换矩阵。该接口为空接口。

L
lanyill 已提交
1989 1990
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
1991

Z
zengyawen 已提交
1992
### translate
Z
zengyawen 已提交
1993

Z
zengyawen 已提交
1994
translate(x: number, y: number): void
Z
zengyawen 已提交
1995 1996 1997

移动当前坐标系的原点。

Z
zhongjianfei 已提交
1998 1999
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
2000 2001
**参数:**

H
HelloCrease 已提交
2002 2003 2004 2005
| 参数   | 类型     | 必填   | 默认值  | 描述       |
| ---- | ------ | ---- | ---- | -------- |
| x    | number | 是    | 0    | 设置水平平移量。 |
| y    | number | 是    | 0    | 设置竖直平移量。 |
Z
zengyawen 已提交
2006

L
lanyill 已提交
2007
**示例:**
Z
zengyawen 已提交
2008

H
geshi  
HelloCrease 已提交
2009 2010
  ```ts
  // xxx.ets
Z
zengyawen 已提交
2011 2012 2013
  @Entry
  @Component
  struct Translate {
Y
yamila 已提交
2014 2015
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
2016

Z
zengyawen 已提交
2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.fillRect(10, 10, 50, 50)
            this.context.translate(70, 70)
            this.context.fillRect(10, 10, 50, 50)
          })
Z
zengyawen 已提交
2028
      }
Z
zengyawen 已提交
2029 2030
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
2031
    }
Z
zengyawen 已提交
2032 2033
  }
  ```
Z
zengyawen 已提交
2034

Z
zengyawen 已提交
2035
  ![zh-cn_image_0000001194192446](figures/zh-cn_image_0000001194192446.png)
Z
zengyawen 已提交
2036 2037


Z
zengyawen 已提交
2038
### drawImage
Z
zengyawen 已提交
2039

Y
yaoyuchi 已提交
2040
drawImage(image: ImageBitmap | PixelMap, dx: number, dy: number): void
Z
zengyawen 已提交
2041

L
lanyill 已提交
2042
drawImage(image: ImageBitmap | PixelMap, dx: number, dy: number, dw: number, dh: number): void
Z
zengyawen 已提交
2043

L
lanyill 已提交
2044
drawImage(image: ImageBitmap | PixelMap, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number):void
Z
zengyawen 已提交
2045 2046 2047

进行图像绘制。

Z
zhongjianfei 已提交
2048
从API version 9开始,该接口支持在ArkTS卡片中使用,卡片中不支持PixelMap对象。
2049

L
lanyill 已提交
2050 2051
**参数:**

H
HelloCrease 已提交
2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062
| 参数    | 类型                                       | 必填   | 默认值  | 描述                                       |
| ----- | ---------------------------------------- | ---- | ---- | ---------------------------------------- |
| image | [ImageBitmap](ts-components-canvas-imagebitmap.md)[PixelMap](../apis/js-apis-image.md#pixelmap7) | 是    | null | 图片资源,请参考ImageBitmap或PixelMap。            |
| sx    | number                                   | 否    | 0    | 裁切源图像时距离源图像左上角的x坐标值。                     |
| sy    | number                                   | 否    | 0    | 裁切源图像时距离源图像左上角的y坐标值。                     |
| sw    | number                                   | 否    | 0    | 裁切源图像时需要裁切的宽度。                           |
| sh    | number                                   | 否    | 0    | 裁切源图像时需要裁切的高度。                           |
| dx    | number                                   | 是    | 0    | 绘制区域左上角在x轴的位置。                           |
| dy    | number                                   | 是    | 0    | 绘制区域左上角在y&nbsp;轴的位置。                     |
| dw    | number                                   | 否    | 0    | 绘制区域的宽度。当绘制区域的宽度和裁剪图像的宽度不一致时,将图像宽度拉伸或压缩为绘制区域的宽度。 |
| dh    | number                                   | 否    | 0    | 绘制区域的高度。当绘制区域的高度和裁剪图像的高度不一致时,将图像高度拉伸或压缩为绘制区域的高度。 |
L
lanyill 已提交
2063

Z
zengyawen 已提交
2064

L
lanyill 已提交
2065
**示例:**
Z
zengyawen 已提交
2066

H
geshi  
HelloCrease 已提交
2067 2068
  ```ts
  // xxx.ets
Z
zengyawen 已提交
2069 2070 2071
  @Entry
  @Component
  struct ImageExample {
Y
yamila 已提交
2072 2073
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Y
yamila 已提交
2074
    private img:ImageBitmap = new ImageBitmap("common/images/example.jpg")
L
lanyill 已提交
2075

Z
zengyawen 已提交
2076 2077 2078 2079 2080 2081 2082
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
Y
yamila 已提交
2083
            this.context.drawImage( this.img,0,0,500,500,0,0,400,200)
Z
zengyawen 已提交
2084
        })
Z
zengyawen 已提交
2085
      }
Z
zengyawen 已提交
2086 2087
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
2088
    }
Z
zengyawen 已提交
2089 2090 2091 2092 2093 2094 2095 2096
  }
  ```

  ![zh-cn_image_0000001194352442](figures/zh-cn_image_0000001194352442.png)


### createImageData

L
lanyill 已提交
2097
createImageData(sw: number, sh: number): ImageData
Z
zengyawen 已提交
2098

L
lanyill 已提交
2099
创建新的ImageData 对象,请参考[ImageData](ts-components-canvas-imagedata.md)
Z
zengyawen 已提交
2100

Z
zhongjianfei 已提交
2101 2102
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
2103 2104
**参数:**

H
HelloCrease 已提交
2105 2106 2107 2108
| 参数   | 类型     | 必填   | 默认   | 描述            |
| ---- | ------ | ---- | ---- | ------------- |
| sw   | number | 是    | 0    | ImageData的宽度。 |
| sh   | number | 是    | 0    | ImageData的高度。 |
Z
zengyawen 已提交
2109 2110


L
lanyill 已提交
2111
createImageData(imageData: ImageData): ImageData
Z
zengyawen 已提交
2112

L
lanyill 已提交
2113
创建新的ImageData 对象,请参考[ImageData](ts-components-canvas-imagedata.md)
Z
zengyawen 已提交
2114

Z
zhongjianfei 已提交
2115 2116
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
2117 2118
**参数:**

H
HelloCrease 已提交
2119 2120
| 参数        | 类型                                       | 必填   | 默认   | 描述                |
| --------- | ---------------------------------------- | ---- | ---- | ----------------- |
L
lanyill 已提交
2121
| imagedata | [ImageData](ts-components-canvas-imagedata.md) | 是    | null | 复制现有的ImageData对象。 |
L
lanyill 已提交
2122 2123 2124

  **返回值:**

H
HelloCrease 已提交
2125 2126
| 类型                                       | 说明             |
| ---------------------------------------- | -------------- |
L
lanyill 已提交
2127
| [ImageData](ts-components-canvas-imagedata.md) | 新的ImageData对象。 |
L
lanyill 已提交
2128

Z
zengyawen 已提交
2129

Y
yaoyuchi 已提交
2130 2131 2132 2133 2134
### getPixelMap

getPixelMap(sx: number, sy: number, sw: number, sh: number): PixelMap

以当前canvas指定区域内的像素创建[PixelMap](../apis/js-apis-image.md#pixelmap7)对象。
L
lanyill 已提交
2135 2136 2137

**参数:**

H
HelloCrease 已提交
2138 2139 2140 2141 2142 2143
| 参数   | 类型     | 必填   | 默认值  | 描述              |
| ---- | ------ | ---- | ---- | --------------- |
| sx   | number | 是    | 0    | 需要输出的区域的左上角x坐标。 |
| sy   | number | 是    | 0    | 需要输出的区域的左上角y坐标。 |
| sw   | number | 是    | 0    | 需要输出的区域的宽度。     |
| sh   | number | 是    | 0    | 需要输出的区域的高度。     |
Z
zengyawen 已提交
2144

L
lanyill 已提交
2145 2146
**返回值:**

H
HelloCrease 已提交
2147 2148 2149
| 类型                                       | 说明            |
| ---------------------------------------- | ------------- |
| [PixelMap](../apis/js-apis-image.md#pixelmap7) | 新的PixelMap对象。 |
Z
zengyawen 已提交
2150 2151 2152

### getImageData

L
lanyill 已提交
2153
getImageData(sx: number, sy: number, sw: number, sh: number): ImageData
Z
zengyawen 已提交
2154

L
lanyill 已提交
2155
以当前canvas指定区域内的像素创建[ImageData](ts-components-canvas-imagedata.md)对象。
L
lanyill 已提交
2156

Z
zhongjianfei 已提交
2157 2158
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
2159 2160
**参数:**

H
HelloCrease 已提交
2161 2162 2163 2164 2165 2166
| 参数   | 类型     | 必填   | 默认值  | 描述              |
| ---- | ------ | ---- | ---- | --------------- |
| sx   | number | 是    | 0    | 需要输出的区域的左上角x坐标。 |
| sy   | number | 是    | 0    | 需要输出的区域的左上角y坐标。 |
| sw   | number | 是    | 0    | 需要输出的区域的宽度。     |
| sh   | number | 是    | 0    | 需要输出的区域的高度。     |
Z
zengyawen 已提交
2167

L
lanyill 已提交
2168 2169
  **返回值:**

H
HelloCrease 已提交
2170 2171
| 类型                                       | 说明             |
| ---------------------------------------- | -------------- |
L
lanyill 已提交
2172 2173 2174 2175 2176 2177 2178
| [ImageData](ts-components-canvas-imagedata.md) | 新的ImageData对象。 |


**示例:**

  ```ts
  // xxx.ets
L
lanyill 已提交
2179 2180 2181 2182 2183 2184
  @Entry
  @Component
  struct GetImageData {
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
    private img:ImageBitmap = new ImageBitmap("/common/images/1234.png")
L
lanyill 已提交
2185

L
lanyill 已提交
2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.drawImage(this.img,0,0,130,130)
            var imagedata = this.context.getImageData(50,50,130,130)
            this.context.putImageData(imagedata,150,150)
          })
      }
      .width('100%')
      .height('100%')
L
lanyill 已提交
2200 2201 2202 2203 2204
    }
  }
  ```

  ![zh-cn_image_000000127777780](figures/zh-cn_image_000000127777780.png)
Z
zengyawen 已提交
2205 2206 2207 2208


### putImageData

L
lanyill 已提交
2209 2210 2211
putImageData(imageData: ImageData, dx: number, dy: number): void

putImageData(imageData: ImageData, dx: number, dy: number, dirtyX: number, dirtyY: number, dirtyWidth: number, dirtyHeight: number): void
Z
zengyawen 已提交
2212

L
lanyill 已提交
2213
使用[ImageData](ts-components-canvas-imagedata.md)数据填充新的矩形区域。
Z
zengyawen 已提交
2214

Z
zhongjianfei 已提交
2215 2216
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
2217 2218
**参数:**

H
HelloCrease 已提交
2219 2220
| 参数          | 类型                                       | 必填   | 默认值          | 描述                            |
| ----------- | ---------------------------------------- | ---- | ------------ | ----------------------------- |
L
lanyill 已提交
2221
| imagedata   | [ImageData](ts-components-canvas-imagedata.md) | 是    | null         | 包含像素值的ImageData对象。            |
H
HelloCrease 已提交
2222 2223 2224 2225 2226 2227
| dx          | number                                   | 是    | 0            | 填充区域在x轴方向的偏移量。                |
| dy          | number                                   | 是    | 0            | 填充区域在y轴方向的偏移量。                |
| dirtyX      | number                                   | 否    | 0            | 源图像数据矩形裁切范围左上角距离源图像左上角的x轴偏移量。 |
| dirtyY      | number                                   | 否    | 0            | 源图像数据矩形裁切范围左上角距离源图像左上角的y轴偏移量。 |
| dirtyWidth  | number                                   | 否    | imagedata的宽度 | 源图像数据矩形裁切范围的宽度。               |
| dirtyHeight | number                                   | 否    | imagedata的高度 | 源图像数据矩形裁切范围的高度。               |
Z
zengyawen 已提交
2228

L
lanyill 已提交
2229 2230
**示例:**

H
geshi  
HelloCrease 已提交
2231 2232
  ```ts
  // xxx.ets
Z
zengyawen 已提交
2233 2234 2235
  @Entry
  @Component
  struct PutImageData {
Y
yamila 已提交
2236 2237
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
2238

Z
zengyawen 已提交
2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            var imageData = this.context.createImageData(100, 100)
            for (var i = 0; i < imageData.data.length; i += 4) {
              imageData.data[i + 0] = 255
              imageData.data[i + 1] = 0
              imageData.data[i + 2] = 255
              imageData.data[i + 3] = 255
            }
            this.context.putImageData(imageData, 10, 10)
          })
Z
zengyawen 已提交
2255
      }
Z
zengyawen 已提交
2256 2257
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
2258
    }
Z
zengyawen 已提交
2259 2260
  }
  ```
Z
zengyawen 已提交
2261

Z
zengyawen 已提交
2262
  ![zh-cn_image_0000001238952387](figures/zh-cn_image_0000001238952387.png)
Z
zengyawen 已提交
2263 2264


L
lanyill 已提交
2265 2266 2267 2268 2269 2270
### setLineDash

setLineDash(segments: number[]): void

设置画布的虚线样式。

Z
zhongjianfei 已提交
2271 2272
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
2273 2274
**参数:** 

H
HelloCrease 已提交
2275 2276
| 参数       | 类型       | 描述                  |
| -------- | -------- | ------------------- |
L
lanyill 已提交
2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297
| segments | number[] | 描述线段如何交替和线段间距长度的数组。 |

**示例:** 

  ```ts
  // xxx.ets
  @Entry
  @Component
  struct SetLineDash {
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
    
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            this.context.arc(100, 75, 50, 0, 6.28)
            this.context.setLineDash([10,20])
L
lanyill 已提交
2298
            this.context.stroke()
L
lanyill 已提交
2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315
          })
      }
      .width('100%')
      .height('100%')
    }
  }
  ```

  ![zh-cn_image_000000127777771](figures/zh-cn_image_000000127777771.png)


### getLineDash

getLineDash(): number[]

获得当前画布的虚线样式。

Z
zhongjianfei 已提交
2316 2317
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
2318 2319
**返回值:** 

H
HelloCrease 已提交
2320 2321
| 类型       | 说明                       |
| -------- | ------------------------ |
L
lanyill 已提交
2322 2323
| number[] | 返回数组,该数组用来描述线段如何交替和间距长度。 |

L
lanyill 已提交
2324

L
lanyill 已提交
2325 2326 2327 2328
**示例:** 

  ```ts
  // xxx.ets
L
lanyill 已提交
2329 2330 2331 2332 2333 2334
  @Entry
  @Component
  struct CanvasGetLineDash {
    @State message: string = 'Hello World'
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
L
lanyill 已提交
2335

L
lanyill 已提交
2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358
    build() {
      Row() {
        Column() {
          Text(this.message)
            .fontSize(50)
            .fontWeight(FontWeight.Bold)
            .onClick(()=>{
              console.error('before getlinedash clicked')
              let res = this.context.getLineDash()
              console.error(JSON.stringify(res))
            })
          Canvas(this.context)
            .width('100%')
            .height('100%')
            .backgroundColor('#ffff00')
            .onReady(() => {
              this.context.arc(100, 75, 50, 0, 6.28)
              this.context.setLineDash([10,20])
              this.context.stroke()
              let res = this.context.getLineDash()
            })
        }
        .width('100%')
L
lanyill 已提交
2359
      }
L
lanyill 已提交
2360
      .height('100%')
L
lanyill 已提交
2361 2362 2363
    }
  }
  ```
L
lanyill 已提交
2364 2365
![zh-cn_image_000000127777778](figures/zh-cn_image_000000127777778.png) 

L
lanyill 已提交
2366 2367 2368 2369 2370 2371 2372 2373


### imageSmoothingQuality

imageSmoothingQuality(quality: imageSmoothingQuality)

用于设置图像平滑度。该接口为空接口。

Z
zhongjianfei 已提交
2374 2375
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
2376 2377
 **参数:** 

H
HelloCrease 已提交
2378 2379 2380
| 参数      | 类型                    | 描述                                       |
| ------- | --------------------- | ---------------------------------------- |
| quality | imageSmoothingQuality | 支持如下三种类型:'low',&nbsp;'medium',&nbsp;'high'。 |
L
lanyill 已提交
2381 2382 2383 2384 2385 2386 2387 2388 2389



### transferFromImageBitmap

transferFromImageBitmap(bitmap: ImageBitmap): void

显示给定的ImageBitmap对象。

Z
zhongjianfei 已提交
2390 2391
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
2392 2393
**参数:** 

H
HelloCrease 已提交
2394 2395
| 参数     | 类型                                       | 描述                 |
| ------ | ---------------------------------------- | ------------------ |
L
lanyill 已提交
2396
| bitmap | [ImageBitmap](ts-components-canvas-imagebitmap.md) | 待显示的ImageBitmap对象。 |
L
lanyill 已提交
2397 2398 2399 2400 2401 2402 2403

**示例:** 

  ```ts
  // xxx.ets
  @Entry
  @Component
L
lanyill 已提交
2404
  struct TransferFromImageBitmap {
L
lanyill 已提交
2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
    private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings)

    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            var imageData = this.offContext.createImageData(100, 100)
            for (var i = 0; i < imageData.data.length; i += 4) {
              imageData.data[i + 0] = 255
              imageData.data[i + 1] = 0
              imageData.data[i + 2] = 255
              imageData.data[i + 3] = 255
            }
            this.offContext.putImageData(imageData, 10, 10)
            var image = this.offContext.transferToImageBitmap()
            this.context.transferFromImageBitmap(image)
          })
      }
      .width('100%')
      .height('100%')
    }
  }
  ```
L
lanyill 已提交
2433 2434
  ![zh-cn_image_0000001238952387](figures/zh-cn_image_0000001238952387.png)  

L
lanyill 已提交
2435 2436 2437 2438 2439 2440 2441

### toDataURL

toDataURL(type?: string, quality?: number): string

生成一个包含图片展示的URL。

2442 2443
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460
**参数:** 

| 参数名     | 参数类型   | 必填   | 描述                                       |
| ------- | ------ | ---- | ---------------------------------------- |
| type    | string | 否    | 可选参数,用于指定图像格式,默认格式为image/png。            |
| quality | number | 否    | 在指定图片格式为image/jpeg或image/webp的情况下,可以从0到1的区间内选择图片的质量。如果超出取值范围,将会使用默认值0.92。 |

**返回值:** 

| 类型     | 说明        |
| ------ | --------- |
| string | 图像的URL地址。 |

**示例:**

  ```ts
  // xxx.ets
L
lanyill 已提交
2461 2462 2463 2464 2465
  @Entry
  @Component
  struct ToDataURL {
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
L
lanyill 已提交
2466

L
lanyill 已提交
2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            var dataURL = this.context.toDataURL()
          })
      }
      .width('100%')
      .height('100%')
L
lanyill 已提交
2479 2480 2481 2482 2483
    }
  }
  ```


Z
zengyawen 已提交
2484
### restore
Z
zengyawen 已提交
2485

Z
zengyawen 已提交
2486
restore(): void
Z
zengyawen 已提交
2487 2488 2489

对保存的绘图上下文进行恢复。

Z
zhongjianfei 已提交
2490 2491
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
2492 2493
**示例:**

H
geshi  
HelloCrease 已提交
2494 2495
  ```ts
  // xxx.ets
Z
zengyawen 已提交
2496 2497 2498
  @Entry
  @Component
  struct CanvasExample {
Y
yamila 已提交
2499 2500
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
2501

Z
zengyawen 已提交
2502 2503 2504 2505 2506 2507 2508
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
Y
yamila 已提交
2509
            this.context.save() // save the default state
L
lanyill 已提交
2510
            this.context.fillStyle = "#00ff00"
Y
yamila 已提交
2511 2512 2513
            this.context.fillRect(20, 20, 100, 100)
            this.context.restore() // restore to the default state
            this.context.fillRect(150, 75, 100, 100)
Z
zengyawen 已提交
2514
          })
Z
zengyawen 已提交
2515
      }
Z
zengyawen 已提交
2516 2517
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
2518
    }
Z
zengyawen 已提交
2519 2520
  }
  ```
L
lanyill 已提交
2521
  ![zh-cn_image_000000127777781](figures/zh-cn_image_000000127777781.png)
Z
zengyawen 已提交
2522 2523


Z
zengyawen 已提交
2524
### save
Z
zengyawen 已提交
2525

Z
zengyawen 已提交
2526
save(): void
Z
zengyawen 已提交
2527

H
HelloCrease 已提交
2528
将当前状态放入栈中,保存canvas的全部状态,通常在需要保存绘制状态时调用。
Z
zengyawen 已提交
2529

Z
zhongjianfei 已提交
2530 2531
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
2532 2533
**示例:**

H
geshi  
HelloCrease 已提交
2534 2535
  ```ts
  // xxx.ets
Z
zengyawen 已提交
2536 2537 2538
  @Entry
  @Component
  struct CanvasExample {
Y
yamila 已提交
2539 2540
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
H
geshi  
HelloCrease 已提交
2541

Z
zengyawen 已提交
2542 2543 2544 2545 2546 2547 2548
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
Y
yamila 已提交
2549
            this.context.save() // save the default state
L
lanyill 已提交
2550
            this.context.fillStyle = "#00ff00"
Y
yamila 已提交
2551 2552 2553
            this.context.fillRect(20, 20, 100, 100)
            this.context.restore() // restore to the default state
            this.context.fillRect(150, 75, 100, 100)
L
lanyill 已提交
2554
          })
Z
zengyawen 已提交
2555
      }
Z
zengyawen 已提交
2556 2557
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
2558
    }
Z
zengyawen 已提交
2559 2560
  }
  ```
L
lanyill 已提交
2561
  ![zh-cn_image_000000127777781](figures/zh-cn_image_000000127777781.png)
Z
zengyawen 已提交
2562 2563


Z
zengyawen 已提交
2564
### createLinearGradient
Z
zengyawen 已提交
2565

Z
zengyawen 已提交
2566
createLinearGradient(x0: number, y0: number, x1: number, y1: number): void
Z
zengyawen 已提交
2567 2568 2569

创建一个线性渐变色。

Z
zhongjianfei 已提交
2570 2571
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
2572 2573
**参数:**

H
HelloCrease 已提交
2574 2575 2576 2577 2578 2579
| 参数   | 类型     | 必填   | 默认值  | 描述       |
| ---- | ------ | ---- | ---- | -------- |
| x0   | number | 是    | 0    | 起点的x轴坐标。 |
| y0   | number | 是    | 0    | 起点的y轴坐标。 |
| x1   | number | 是    | 0    | 终点的x轴坐标。 |
| y1   | number | 是    | 0    | 终点的y轴坐标。 |
Z
zengyawen 已提交
2580

L
lanyill 已提交
2581
**示例:**
Z
zengyawen 已提交
2582

H
geshi  
HelloCrease 已提交
2583 2584
  ```ts
  // xxx.ets
Z
zengyawen 已提交
2585 2586 2587
  @Entry
  @Component
  struct CreateLinearGradient {
Y
yamila 已提交
2588 2589
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
2590
    
Z
zengyawen 已提交
2591 2592 2593 2594 2595 2596 2597 2598
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            var grad = this.context.createLinearGradient(50,0, 300,100)
L
lanyill 已提交
2599 2600 2601
            grad.addColorStop(0.0, '#ff0000')
            grad.addColorStop(0.5, '#ffffff')
            grad.addColorStop(1.0, '#00ff00')
Z
zengyawen 已提交
2602
            this.context.fillStyle = grad
L
lanyill 已提交
2603
            this.context.fillRect(0, 0, 400, 400)
Z
zengyawen 已提交
2604
          })
Z
zengyawen 已提交
2605
      }
Z
zengyawen 已提交
2606 2607
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
2608
    }
Z
zengyawen 已提交
2609 2610
  }
  ```
Z
zengyawen 已提交
2611

Z
zengyawen 已提交
2612
  ![zh-cn_image_0000001194032466](figures/zh-cn_image_0000001194032466.png)
Z
zengyawen 已提交
2613 2614


Z
zengyawen 已提交
2615
### createRadialGradient
Z
zengyawen 已提交
2616

Z
zengyawen 已提交
2617
createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): void
Z
zengyawen 已提交
2618 2619 2620

创建一个径向渐变色。

Z
zhongjianfei 已提交
2621 2622
从API version 9开始,该接口支持在ArkTS卡片中使用。

L
lanyill 已提交
2623 2624
**参数:**

H
HelloCrease 已提交
2625 2626 2627 2628 2629 2630 2631 2632
| 参数   | 类型     | 必填   | 默认值  | 描述                |
| ---- | ------ | ---- | ---- | ----------------- |
| x0   | number | 是    | 0    | 起始圆的x轴坐标。         |
| y0   | number | 是    | 0    | 起始圆的y轴坐标。         |
| r0   | number | 是    | 0    | 起始圆的半径。必须是非负且有限的。 |
| x1   | number | 是    | 0    | 终点圆的x轴坐标。         |
| y1   | number | 是    | 0    | 终点圆的y轴坐标。         |
| r1   | number | 是    | 0    | 终点圆的半径。必须为非负且有限的。 |
Z
zengyawen 已提交
2633

L
lanyill 已提交
2634 2635
**示例:**

H
geshi  
HelloCrease 已提交
2636 2637
  ```ts
  // xxx.ets
Z
zengyawen 已提交
2638 2639 2640
  @Entry
  @Component
  struct CreateRadialGradient {
Y
yamila 已提交
2641 2642
    private settings: RenderingContextSettings = new RenderingContextSettings(true)
    private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
Z
zengyawen 已提交
2643
    
Z
zengyawen 已提交
2644 2645 2646 2647 2648 2649 2650 2651
    build() {
      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(() =>{
            var grad = this.context.createRadialGradient(200,200,50, 200,200,200)
L
lanyill 已提交
2652 2653 2654
            grad.addColorStop(0.0, '#ff0000')
            grad.addColorStop(0.5, '#ffffff')
            grad.addColorStop(1.0, '#00ff00')
Z
zengyawen 已提交
2655
            this.context.fillStyle = grad
L
lanyill 已提交
2656
            this.context.fillRect(0, 0, 440, 440)
Z
zengyawen 已提交
2657
          })
Z
zengyawen 已提交
2658
      }
Z
zengyawen 已提交
2659 2660
      .width('100%')
      .height('100%')
Z
zengyawen 已提交
2661
    }
Z
zengyawen 已提交
2662 2663
  }
  ```
Z
zengyawen 已提交
2664

Z
zengyawen 已提交
2665
  ![zh-cn_image_0000001239032419](figures/zh-cn_image_0000001239032419.png)
Z
zengyawen 已提交
2666

2667
### createConicGradient<sup>10+</sup>
2668 2669 2670 2671 2672 2673 2674 2675 2676 2677

createConicGradient(startAngle: number, x: number, y: number): CanvasGradient

创建一个圆锥渐变色。

**参数:**

| 参数       | 类型   | 必填 | 默认值 | 描述                                                         |
| ---------- | ------ | ---- | ------ | ------------------------------------------------------------ |
| startAngle | number | 是   | 0      | 开始渐变的角度,以弧度为单位。角度测量从中心右侧水平开始,顺时针移动。 |
2678 2679
| x          | number | 是   | 0      | 圆锥渐变的中心x轴坐标。单位:vp                              |
| y          | number | 是   | 0      | 圆锥渐变的中心y轴坐标。单位:vp                              |
2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695

**示例:**

```ts
// xxx.ets
@Entry
@Component
struct CanvasExample {
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)

  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .width('100%')
        .height('100%')
2696
        .backgroundColor('#ffffff')
2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712
        .onReady(() => {
          var grad = this.context.createConicGradient(0, 50, 80)
          grad.addColorStop(0.0, '#ff0000')
          grad.addColorStop(0.5, '#ffffff')
          grad.addColorStop(1.0, '#00ff00')
          this.context.fillStyle = grad
          this.context.fillRect(0, 30, 100, 100)
        })
    }
    .width('100%')
    .height('100%')
  }
}
```

  ![zh-cn_image_0000001239032419](figures/zh-cn_image_0000001239032420.png)
Z
zengyawen 已提交
2713

Z
zengyawen 已提交
2714
## CanvasPattern
Z
zengyawen 已提交
2715

Z
zhongjianfei 已提交
2716 2717 2718
一个Object对象, 通过[createPattern](#createpattern)方法创建。

从API version 9开始,该接口支持在ArkTS卡片中使用。