使用OffscreenCanvasRenderingContext2D在Canvas上進(jìn)行離屏繪制,繪制對象可以是矩形、文本、圖片等。離屏繪制是指將需要繪制的內(nèi)容先繪制在緩存區(qū),然后將其轉(zhuǎn)換成圖片,一次性繪制到canvas上,加快了繪制速度。
從 API Version 8 開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。
OffscreenCanvasRenderingContext2D(width: number, height: number, settings: RenderingContextSettings)
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù)名 | 參數(shù)類型 | 必填 | 參數(shù)描述 |
---|---|---|---|
width | number | 是 | 離屏畫布的寬度 |
height | number | 是 | 離屏畫布的高度 |
settings | 否 | 見RenderingContextSettings接口描述。 |
名稱 | 類型 | 描述 |
---|---|---|
string | CanvasGradient | CanvasPattern | 指定繪制的填充色。 - 類型為string時(shí),表示設(shè)置填充區(qū)域的顏色。 - 類型為CanvasGradient時(shí),表示漸變對象,使用createLinearGradient方法創(chuàng)建。 - 類型為CanvasPattern時(shí),使用createPattern方法創(chuàng)建。 從API version 9開始,該接口支持在ArkTS卡片中使用。 | |
number | 設(shè)置繪制線條的寬度。 從API version 9開始,該接口支持在ArkTS卡片中使用。 | |
string | CanvasGradient | CanvasPattern | 設(shè)置描邊的顏色。 - 類型為string時(shí),表示設(shè)置描邊使用的顏色。 - 類型為CanvasGradient時(shí),表示漸變對象,使用createLinearGradient方法創(chuàng)建。 - 類型為CanvasPattern時(shí),使用createPattern方法創(chuàng)建。 從API version 9開始,該接口支持在ArkTS卡片中使用。 | |
CanvasLineCap | 指定線端點(diǎn)的樣式,可選值為: - 'butt':線端點(diǎn)以方形結(jié)束。 - 'round':線端點(diǎn)以圓形結(jié)束。 - 'square':線端點(diǎn)以方形結(jié)束,該樣式下會(huì)增加一個(gè)長度和線段厚度相同,寬度是線段厚度一半的矩形。 - 默認(rèn)值:'butt'。 從API version 9開始,該接口支持在ArkTS卡片中使用。 | |
CanvasLineJoin | 指定線段間相交的交點(diǎn)樣式,可選值為: - 'round':在線段相連處繪制一個(gè)扇形,扇形的圓角半徑是線段的寬度。 - 'bevel':在線段相連處使用三角形為底填充, 每個(gè)部分矩形拐角獨(dú)立。 - 'miter':在相連部分的外邊緣處進(jìn)行延伸,使其相交于一點(diǎn),形成一個(gè)菱形區(qū)域,該屬性可以通過設(shè)置miterLimit屬性展現(xiàn)效果。 - 默認(rèn)值:'miter'。 從API version 9開始,該接口支持在ArkTS卡片中使用。 | |
number | 設(shè)置斜接面限制值,該值指定了線條相交處內(nèi)角和外角的距離。 - 默認(rèn)值:10。 從API version 9開始,該接口支持在ArkTS卡片中使用。 | |
string | 設(shè)置文本繪制中的字體樣式。 語法:ctx.font='font-size font-family' - font-size(可選),指定字號和行高,單位只支持px。 - font-family(可選),指定字體系列。 語法:ctx.font='font-style font-weight font-size font-family' - font-style(可選),用于指定字體樣式,支持如下幾種樣式:'normal','italic'。 - font-weight(可選),用于指定字體的粗細(xì),支持如下幾種類型:'normal', 'bold', 'bolder', 'lighter', 100, 200, 300, 400, 500, 600, 700, 800, 900。 - font-size(可選),指定字號和行高,單位只支持px。 - font-family(可選),指定字體系列,支持如下幾種類型:'sans-serif', 'serif', 'monospace'。 - 默認(rèn)值:'normal normal 14px sans-serif'。 從API version 9開始,該接口支持在ArkTS卡片中使用。 | |
CanvasTextAlign | 設(shè)置文本繪制中的文本對齊方式,可選值為: - 'left':文本左對齊。 - 'right':文本右對齊。 - 'center':文本居中對齊。 - 'start':文本對齊界線開始的地方。 - 'end':文本對齊界線結(jié)束的地方。 說明: ltr布局模式下'start'和'left'一致,rtl布局模式下'start'和'right'一致·。 默認(rèn)值:'left'。 從API version 9開始,該接口支持在ArkTS卡片中使用。 | |
CanvasTextBaseline | 設(shè)置文本繪制中的水平對齊方式,可選值為: - 'alphabetic':文本基線是標(biāo)準(zhǔn)的字母基線。 - 'top':文本基線在文本塊的頂部。 - 'hanging':文本基線是懸掛基線。 - 'middle':文本基線在文本塊的中間。 - 'ideographic':文字基線是表意字基線;如果字符本身超出了alphabetic基線,那么ideograhpic基線位置在字符本身的底部。 - 'bottom':文本基線在文本塊的底部。 與ideographic基線的區(qū)別在于ideographic基線不需要考慮下行字母。 - 默認(rèn)值:'alphabetic'。 從API version 9開始,該接口支持在ArkTS卡片中使用。 | |
number | 設(shè)置透明度,0.0為完全透明,1.0為完全不透明。 | |
number | 設(shè)置畫布的虛線偏移量,精度為float。 - 默認(rèn)值:0.0。 從API version 9開始,該接口支持在ArkTS卡片中使用。 | |
string | 設(shè)置合成操作的方式。類型字段可選值有'source-over','source-atop','source-in','source-out','destination-over','destination-atop','destination-in','destination-out','lighter','copy','xor'。 - 默認(rèn)值:'source-over'。 從API version 9開始,該接口支持在ArkTS卡片中使用。 | |
number | 設(shè)置繪制陰影時(shí)的模糊級別,值越大越模糊,精度為float。 - 默認(rèn)值:0.0。 從API version 9開始,該接口支持在ArkTS卡片中使用。 | |
string | 設(shè)置繪制陰影時(shí)的陰影顏色。 從API version 9開始,該接口支持在ArkTS卡片中使用。 | |
number | 設(shè)置繪制陰影時(shí)和原有對象的水平偏移值。 從API version 9開始,該接口支持在ArkTS卡片中使用。 | |
number | 設(shè)置繪制陰影時(shí)和原有對象的垂直偏移值。 從API version 9開始,該接口支持在ArkTS卡片中使用。 | |
boolean | 用于設(shè)置繪制圖片時(shí)是否進(jìn)行圖像平滑度調(diào)整,true為啟用,false為不啟用。 - 默認(rèn)值:true。 從API version 9開始,該接口支持在ArkTS卡片中使用。 |
fillStyle、shadowColor與 strokeStyle 中string類型格式為 'rgb(255, 255, 255)','rgba(255, 255, 255, 1.0)','#FFFFFF'。
- // xxx.ets
- @Entry
- @Component
- struct FillStyleExample {
- 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(() =>{
- this.offContext.fillStyle = '#0000ff'
- this.offContext.fillRect(20, 20, 150, 100)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
- // xxx.ets
- @Entry
- @Component
- struct LineWidthExample {
- 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(() =>{
- this.offContext.lineWidth = 5
- this.offContext.strokeRect(25, 25, 85, 105)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
- // xxx.ets
- @Entry
- @Component
- struct StrokeStyleExample {
- 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(() =>{
- this.offContext.lineWidth = 10
- this.offContext.strokeStyle = '#0000ff'
- this.offContext.strokeRect(25, 25, 155, 105)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
- // xxx.ets
- @Entry
- @Component
- struct LineCapExample {
- 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(() =>{
- this.offContext.lineWidth = 8
- this.offContext.beginPath()
- this.offContext.lineCap = 'round'
- this.offContext.moveTo(30, 50)
- this.offContext.lineTo(220, 50)
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
- // xxx.ets
- @Entry
- @Component
- struct LineJoinExample {
- 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(() =>{
- this.offContext.beginPath()
- this.offContext.lineWidth = 8
- this.offContext.lineJoin = 'miter'
- this.offContext.moveTo(30, 30)
- this.offContext.lineTo(120, 60)
- this.offContext.lineTo(30, 110)
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
- // xxx.ets
- @Entry
- @Component
- struct MiterLimit {
- 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(() =>{
- this.offContext.lineWidth = 8
- this.offContext.lineJoin = 'miter'
- this.offContext.miterLimit = 3
- this.offContext.moveTo(30, 30)
- this.offContext.lineTo(60, 35)
- this.offContext.lineTo(30, 37)
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
- // xxx.ets
- @Entry
- @Component
- struct Fonts {
- 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(() =>{
- this.offContext.font = '30px sans-serif'
- this.offContext.fillText("Hello World", 20, 60)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
- // xxx.ets
- @Entry
- @Component
- struct CanvasExample {
- 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(() =>{
- this.offContext.strokeStyle = '#0000ff'
- this.offContext.moveTo(140, 10)
- this.offContext.lineTo(140, 160)
- this.offContext.stroke()
- this.offContext.font = '18px sans-serif'
- this.offContext.textAlign = 'start'
- this.offContext.fillText('textAlign=start', 140, 60)
- this.offContext.textAlign = 'end'
- this.offContext.fillText('textAlign=end', 140, 80)
- this.offContext.textAlign = 'left'
- this.offContext.fillText('textAlign=left', 140, 100)
- this.offContext.textAlign = 'center'
- this.offContext.fillText('textAlign=center',140, 120)
- this.offContext.textAlign = 'right'
- this.offContext.fillText('textAlign=right',140, 140)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
- // xxx.ets
- @Entry
- @Component
- struct TextBaseline {
- 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(() =>{
- this.offContext.strokeStyle = '#0000ff'
- this.offContext.moveTo(0, 120)
- this.offContext.lineTo(400, 120)
- this.offContext.stroke()
- this.offContext.font = '20px sans-serif'
- this.offContext.textBaseline = 'top'
- this.offContext.fillText('Top', 10, 120)
- this.offContext.textBaseline = 'bottom'
- this.offContext.fillText('Bottom', 55, 120)
- this.offContext.textBaseline = 'middle'
- this.offContext.fillText('Middle', 125, 120)
- this.offContext.textBaseline = 'alphabetic'
- this.offContext.fillText('Alphabetic', 195, 120)
- this.offContext.textBaseline = 'hanging'
- this.offContext.fillText('Hanging', 295, 120)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
- // xxx.ets
- @Entry
- @Component
- struct GlobalAlpha {
- 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(() =>{
- this.offContext.fillStyle = 'rgb(0,0,255)'
- this.offContext.fillRect(0, 0, 50, 50)
- this.offContext.globalAlpha = 0.4
- this.offContext.fillStyle = 'rgb(0,0,255)'
- this.offContext.fillRect(50, 50, 50, 50)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
- // xxx.ets
- @Entry
- @Component
- struct LineDashOffset {
- 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(() =>{
- this.offContext.arc(100, 75, 50, 0, 6.28)
- this.offContext.setLineDash([10,20])
- this.offContext.lineDashOffset = 10.0
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
名稱 | 描述 |
---|---|
source-over | 在現(xiàn)有繪制內(nèi)容上顯示新繪制內(nèi)容,屬于默認(rèn)值。 |
source-atop | 在現(xiàn)有繪制內(nèi)容頂部顯示新繪制內(nèi)容。 |
source-in | 在現(xiàn)有繪制內(nèi)容中顯示新繪制內(nèi)容。 |
source-out | 在現(xiàn)有繪制內(nèi)容之外顯示新繪制內(nèi)容。 |
destination-over | 在新繪制內(nèi)容上方顯示現(xiàn)有繪制內(nèi)容。 |
destination-atop | 在新繪制內(nèi)容頂部顯示現(xiàn)有繪制內(nèi)容。 |
destination-in | 在新繪制內(nèi)容中顯示現(xiàn)有繪制內(nèi)容。 |
destination-out | 在新繪制內(nèi)容外顯示現(xiàn)有繪制內(nèi)容。 |
lighter | 顯示新繪制內(nèi)容和現(xiàn)有繪制內(nèi)容。 |
copy | 顯示新繪制內(nèi)容而忽略現(xiàn)有繪制內(nèi)容。 |
xor | 使用異或操作對新繪制內(nèi)容與現(xiàn)有繪制內(nèi)容進(jìn)行融合。 |
- // xxx.ets
- @Entry
- @Component
- struct GlobalCompositeOperation {
- 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(() =>{
- this.offContext.fillStyle = 'rgb(255,0,0)'
- this.offContext.fillRect(20, 20, 50, 50)
- this.offContext.globalCompositeOperation = 'source-over'
- this.offContext.fillStyle = 'rgb(0,0,255)'
- this.offContext.fillRect(50, 50, 50, 50)
- this.offContext.fillStyle = 'rgb(255,0,0)'
- this.offContext.fillRect(120, 20, 50, 50)
- this.offContext.globalCompositeOperation = 'destination-over'
- this.offContext.fillStyle = 'rgb(0,0,255)'
- this.offContext.fillRect(150, 50, 50, 50)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
- // xxx.ets
- @Entry
- @Component
- struct ShadowBlur {
- 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(() =>{
- this.offContext.shadowBlur = 30
- this.offContext.shadowColor = 'rgb(0,0,0)'
- this.offContext.fillStyle = 'rgb(255,0,0)'
- this.offContext.fillRect(20, 20, 100, 80)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
- // xxx.ets
- @Entry
- @Component
- struct ShadowColor {
- 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(() =>{
- this.offContext.shadowBlur = 30
- this.offContext.shadowColor = 'rgb(0,0,255)'
- this.offContext.fillStyle = 'rgb(255,0,0)'
- this.offContext.fillRect(30, 30, 100, 100)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
- // xxx.ets
- @Entry
- @Component
- struct ShadowOffsetX {
- 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(() =>{
- this.offContext.shadowBlur = 10
- this.offContext.shadowOffsetX = 20
- this.offContext.shadowColor = 'rgb(0,0,0)'
- this.offContext.fillStyle = 'rgb(255,0,0)'
- this.offContext.fillRect(20, 20, 100, 80)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
- // xxx.ets
- @Entry
- @Component
- struct ShadowOffsetY {
- 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(() =>{
- this.offContext.shadowBlur = 10
- this.offContext.shadowOffsetY = 20
- this.offContext.shadowColor = 'rgb(0,0,0)'
- this.offContext.fillStyle = 'rgb(255,0,0)'
- this.offContext.fillRect(30, 30, 100, 100)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
- // xxx.ets
- @Entry
- @Component
- struct ImageSmoothingEnabled {
- private settings: RenderingContextSettings = new RenderingContextSettings(true)
- private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
- private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg")
- 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(() =>{
- this.offContext.imageSmoothingEnabled = false
- this.offContext.drawImage( this.img,0,0,400,200)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
fillRect(x: number, y: number, w: number, h: number): void
填充一個(gè)矩形。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 說明 |
---|---|---|---|---|
x | number | 是 | 0 | 指定矩形左上角點(diǎn)的x坐標(biāo)。 |
y | number | 是 | 0 | 指定矩形左上角點(diǎn)的y坐標(biāo)。 |
width | number | 是 | 0 | 指定矩形的寬度。 |
height | number | 是 | 0 | 指定矩形的高度。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct FillRect {
- 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(() =>{
- this.offContext.fillRect(30,30,100,100)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
strokeRect(x: number, y: number, w: number, h: number): void
繪制具有邊框的矩形,矩形內(nèi)部不填充。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 說明 |
---|---|---|---|---|
x | number | 是 | 0 | 指定矩形的左上角x坐標(biāo)。 |
y | number | 是 | 0 | 指定矩形的左上角y坐標(biāo)。 |
width | number | 是 | 0 | 指定矩形的寬度。 |
height | number | 是 | 0 | 指定矩形的高度。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct StrokeRect {
- 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(() =>{
- this.offContext.strokeRect(30, 30, 200, 150)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
clearRect(x: number, y: number, w: number, h: number): void
刪除指定區(qū)域內(nèi)的繪制內(nèi)容。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
x | number | 是 | 0 | 指定矩形上的左上角x坐標(biāo)。 |
y | number | 是 | 0 | 指定矩形上的左上角y坐標(biāo)。 |
width | number | 是 | 0 | 指定矩形的寬度。 |
height | number | 是 | 0 | 指定矩形的高度。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct ClearRect {
- 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(() =>{
- this.offContext.fillStyle = 'rgb(0,0,255)'
- this.offContext.fillRect(20,20,200,200)
- this.offContext.clearRect(30,30,150,100)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
fillText(text: string, x: number, y: number, maxWidth?: number): void
繪制填充類文本。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 說明 |
---|---|---|---|---|
text | string | 是 | "" | 需要繪制的文本內(nèi)容。 |
x | number | 是 | 0 | 需要繪制的文本的左下角x坐標(biāo)。 |
y | number | 是 | 0 | 需要繪制的文本的左下角y坐標(biāo)。 |
maxWidth | number | 否 | - | 指定文本允許的最大寬度。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct FillText {
- 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(() =>{
- this.offContext.font = '30px sans-serif'
- this.offContext.fillText("Hello World!", 20, 100)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
strokeText(text: string, x: number, y: number): void
繪制描邊類文本。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
text | string | 是 | "" | 需要繪制的文本內(nèi)容。 |
x | number | 是 | 0 | 需要繪制的文本的左下角x坐標(biāo)。 |
y | number | 是 | 0 | 需要繪制的文本的左下角y坐標(biāo)。 |
maxWidth | number | 否 | - | 需要繪制的文本的最大寬度 。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct StrokeText {
- 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(() =>{
- this.offContext.font = '55px sans-serif'
- this.offContext.strokeText("Hello World!", 20, 60)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
measureText(text: string): TextMetrics
該方法返回一個(gè)文本測算的對象,通過該對象可以獲取指定文本的寬度值。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 說明 |
---|---|---|---|---|
text | string | 是 | "" | 需要進(jìn)行測量的文本。 |
返回值:
類型 | 說明 |
---|---|
TextMetrics | 文本的尺寸信息 |
TextMetrics類型描述:
屬性 | 類型 | 描述 |
---|---|---|
width | number | 字符串的寬度。 |
height | number | 字符串的高度。 |
actualBoundingBoxAscent | number | 從CanvasRenderingContext2D.textBaseline 屬性標(biāo)明的水平線到渲染文本的矩形邊界頂部的距離,當(dāng)前值為0。 |
actualBoundingBoxDescent | number | 從CanvasRenderingContext2D.textBaseline 屬性標(biāo)明的水平線到渲染文本的矩形邊界底部的距離,當(dāng)前值為0。 |
actualBoundingBoxLeft | number | 平行于基線,從CanvasRenderingContext2D.textAlign 屬性確定的對齊點(diǎn)到文本矩形邊界左側(cè)的距離,當(dāng)前值為0。 |
actualBoundingBoxRight | number | 平行于基線,從CanvasRenderingContext2D.textAlign 屬性確定的對齊點(diǎn)到文本矩形邊界右側(cè)的距離,當(dāng)前值為0。 |
alphabeticBaseline | number | 從CanvasRenderingContext2D.textBaseline 屬性標(biāo)明的水平線到線框的 alphabetic 基線的距離,當(dāng)前值為0。 |
emHeightAscent | number | 從CanvasRenderingContext2D.textBaseline 屬性標(biāo)明的水平線到線框中 em 方塊頂部的距離,當(dāng)前值為0。 |
emHeightDescent | number | 從CanvasRenderingContext2D.textBaseline 屬性標(biāo)明的水平線到線框中 em 方塊底部的距離,當(dāng)前值為0。 |
fontBoundingBoxAscent | number | 從CanvasRenderingContext2D.textBaseline 屬性標(biāo)明的水平線到渲染文本的所有字體的矩形最高邊界頂部的距離,當(dāng)前值為0。 |
fontBoundingBoxDescent | number | 從CanvasRenderingContext2D.textBaseline 屬性標(biāo)明的水平線到渲染文本的所有字體的矩形邊界最底部的距離,當(dāng)前值為0。 |
hangingBaseline | number | 從CanvasRenderingContext2D.textBaseline 屬性標(biāo)明的水平線到線框的 hanging 基線的距離,當(dāng)前值為0。 |
ideographicBaseline | number | 從CanvasRenderingContext2D.textBaseline 屬性標(biāo)明的水平線到線框的 ideographic 基線的距離,當(dāng)前值為0。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct MeasureText {
- 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(() =>{
- this.offContext.font = '50px sans-serif'
- this.offContext.fillText("Hello World!", 20, 100)
- this.offContext.fillText("width:" + this.context.measureText("Hello World!").width, 20, 200)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
stroke(path?: Path2D): void
進(jìn)行邊框繪制操作。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
path | 否 | null | 需要繪制的Path2D。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct Stroke {
- 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(() =>{
- this.offContext.moveTo(25, 25)
- this.offContext.lineTo(25, 105)
- this.offContext.lineTo(75, 105)
- this.offContext.lineTo(75, 25)
- this.offContext.strokeStyle = 'rgb(0,0,255)'
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
beginPath(): void
創(chuàng)建一個(gè)新的繪制路徑。
從API version 9開始,該接口支持在ArkTS卡片中使用。
示例:
- // xxx.ets
- @Entry
- @Component
- struct BeginPath {
- 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(() =>{
- this.offContext.beginPath()
- this.offContext.lineWidth = 6
- this.offContext.strokeStyle = '#0000ff'
- this.offContext.moveTo(15, 80)
- this.offContext.lineTo(280, 160)
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
moveTo(x: number, y: number): void
路徑從當(dāng)前點(diǎn)移動(dòng)到指定點(diǎn)。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 說明 |
---|---|---|---|---|
x | number | 是 | 0 | 指定位置的x坐標(biāo)。 |
y | number | 是 | 0 | 指定位置的y坐標(biāo)。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct MoveTo {
- 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(() =>{
- this.offContext.beginPath()
- this.offContext.moveTo(10, 10)
- this.offContext.lineTo(280, 160)
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
lineTo(x: number, y: number): void
從當(dāng)前點(diǎn)到指定點(diǎn)進(jìn)行路徑連接。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
x | number | 是 | 0 | 指定位置的x坐標(biāo)。 |
y | number | 是 | 0 | 指定位置的y坐標(biāo)。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct LineTo {
- 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(() =>{
- this.offContext.beginPath()
- this.offContext.moveTo(10, 10)
- this.offContext.lineTo(280, 160)
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
closePath(): void
結(jié)束當(dāng)前路徑形成一個(gè)封閉路徑。
從API version 9開始,該接口支持在ArkTS卡片中使用。
示例:
- // xxx.ets
- @Entry
- @Component
- struct ClosePath {
- 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(() =>{
- this.offContext.beginPath()
- this.offContext.moveTo(30, 30)
- this.offContext.lineTo(110, 30)
- this.offContext.lineTo(70, 90)
- this.offContext.closePath()
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
createPattern(image: ImageBitmap, repetition: string | null): CanvasPattern | null
通過指定圖像和重復(fù)方式創(chuàng)建圖片填充的模板。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
image | 是 | null | 圖源對象,具體參考ImageBitmap對象。 | |
repetition | string | 是 | “” | 設(shè)置圖像重復(fù)的方式,取值為:'repeat'、'repeat-x'、 'repeat-y'、'no-repeat'。 |
返回值:
類型 | 說明 |
---|---|
通過指定圖像和重復(fù)方式創(chuàng)建圖片填充的模板對象。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct CreatePattern {
- private settings: RenderingContextSettings = new RenderingContextSettings(true)
- private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
- private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg")
- 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 pattern = this.offContext.createPattern(this.img, 'repeat')
- this.offContext.fillStyle = pattern
- this.offContext.fillRect(0, 0, 200, 200)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void
創(chuàng)建三次貝賽爾曲線的路徑。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
cp1x | number | 是 | 0 | 第一個(gè)貝塞爾參數(shù)的x坐標(biāo)值。 |
cp1y | number | 是 | 0 | 第一個(gè)貝塞爾參數(shù)的y坐標(biāo)值。 |
cp2x | number | 是 | 0 | 第二個(gè)貝塞爾參數(shù)的x坐標(biāo)值。 |
cp2y | number | 是 | 0 | 第二個(gè)貝塞爾參數(shù)的y坐標(biāo)值。 |
x | number | 是 | 0 | 路徑結(jié)束時(shí)的x坐標(biāo)值。 |
y | number | 是 | 0 | 路徑結(jié)束時(shí)的y坐標(biāo)值。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct BezierCurveTo {
- 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(() =>{
- this.offContext.beginPath()
- this.offContext.moveTo(10, 10)
- this.offContext.bezierCurveTo(20, 100, 200, 100, 200, 20)
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void
創(chuàng)建二次貝賽爾曲線的路徑。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
cpx | number | 是 | 0 | 貝塞爾參數(shù)的x坐標(biāo)值。 |
cpy | number | 是 | 0 | 貝塞爾參數(shù)的y坐標(biāo)值。 |
x | number | 是 | 0 | 路徑結(jié)束時(shí)的x坐標(biāo)值。 |
y | number | 是 | 0 | 路徑結(jié)束時(shí)的y坐標(biāo)值。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct QuadraticCurveTo {
- 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(() =>{
- this.offContext.beginPath()
- this.offContext.moveTo(20, 20)
- this.offContext.quadraticCurveTo(100, 100, 200, 20)
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void
繪制弧線路徑。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
x | number | 是 | 0 | 弧線圓心的x坐標(biāo)值。 |
y | number | 是 | 0 | 弧線圓心的y坐標(biāo)值。 |
radius | number | 是 | 0 | 弧線的圓半徑。 |
startAngle | number | 是 | 0 | 弧線的起始弧度。 |
endAngle | number | 是 | 0 | 弧線的終止弧度。 |
counterclockwise | boolean | 否 | false | 是否逆時(shí)針繪制圓弧。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct Arc {
- 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(() =>{
- this.offContext.beginPath()
- this.offContext.arc(100, 75, 50, 0, 6.28)
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void
依據(jù)圓弧經(jīng)過的點(diǎn)和圓弧半徑創(chuàng)建圓弧路徑。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
x1 | number | 是 | 0 | 圓弧經(jīng)過的第一個(gè)點(diǎn)的x坐標(biāo)值。 |
y1 | number | 是 | 0 | 圓弧經(jīng)過的第一個(gè)點(diǎn)的y坐標(biāo)值。 |
x2 | number | 是 | 0 | 圓弧經(jīng)過的第二個(gè)點(diǎn)的x坐標(biāo)值。 |
y2 | number | 是 | 0 | 圓弧經(jīng)過的第二個(gè)點(diǎn)的y坐標(biāo)值。 |
radius | number | 是 | 0 | 圓弧的圓半徑值。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct ArcTo {
- 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(() =>{
- this.offContext.moveTo(100, 20)
- this.offContext.arcTo(150, 20, 150, 70, 50)
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void
在規(guī)定的矩形區(qū)域繪制一個(gè)橢圓。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 說明 |
---|---|---|---|---|
x | number | 是 | 0 | 橢圓圓心的x軸坐標(biāo)。 |
y | number | 是 | 0 | 橢圓圓心的y軸坐標(biāo)。 |
radiusX | number | 是 | 0 | 橢圓x軸的半徑長度。 |
radiusY | number | 是 | 0 | 橢圓y軸的半徑長度。 |
rotation | number | 是 | 0 | 橢圓的旋轉(zhuǎn)角度,單位為弧度。 |
startAngle | number | 是 | 0 | 橢圓繪制的起始點(diǎn)角度,以弧度表示。 |
endAngle | number | 是 | 0 | 橢圓繪制的結(jié)束點(diǎn)角度,以弧度表示。 |
counterclockwise | boolean | 否 | false | 是否以逆時(shí)針方向繪制橢圓。 true:逆時(shí)針方向繪制橢圓。 false:順時(shí)針方向繪制橢圓。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct CanvasExample {
- 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(() =>{
- this.offContext.beginPath()
- this.offContext.ellipse(200, 200, 50, 100, Math.PI * 0.25, Math.PI * 0.5, Math.PI * 2)
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
rect(x: number, y: number, w: number, h: number): void
創(chuàng)建矩形路徑。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
x | number | 是 | 0 | 指定矩形的左上角x坐標(biāo)值。 |
y | number | 是 | 0 | 指定矩形的左上角y坐標(biāo)值。 |
w | number | 是 | 0 | 指定矩形的寬度。 |
h | number | 是 | 0 | 指定矩形的高度。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct CanvasExample {
- 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(() =>{
- this.offContext.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20)
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
fill(fillRule?: CanvasFillRule): void
對封閉路徑進(jìn)行填充。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
fillRule | CanvasFillRule | 否 | "nonzero" | 指定要填充對象的規(guī)則。 可選參數(shù)為:"nonzero", "evenodd"。 |
- // xxx.ets
- @Entry
- @Component
- struct Fill {
- 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(() =>{
- this.offContext.rect(20, 20, 100, 100) // Create a 100*100 rectangle at (20, 20)
- this.offContext.fill()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
fill(path: Path2D, fillRule?: CanvasFillRule): void
對封閉路徑進(jìn)行填充。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
path | Path2D | 是 | Path2D填充路徑。 | |
fillRule | CanvasFillRule | 否 | "nonzero" | 指定要填充對象的規(guī)則。 可選參數(shù)為:"nonzero", "evenodd"。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct Fill {
- 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(() =>{
- 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()
- // Fill path
- this.offContext.fillStyle = '#00ff00'
- this.offContext.fill(region, "evenodd")
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
clip(fillRule?: CanvasFillRule): void
設(shè)置當(dāng)前路徑為剪切路徑。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
fillRule | CanvasFillRule | 否 | "nonzero" | 指定要剪切對象的規(guī)則。 可選參數(shù)為:"nonzero", "evenodd"。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct Clip {
- 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(() =>{
- this.offContext.rect(0, 0, 100, 200)
- this.offContext.stroke()
- this.offContext.clip()
- this.offContext.fillStyle = "rgb(255,0,0)"
- this.offContext.fillRect(0, 0, 200, 200)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
clip(path:Path2D, fillRule?: CanvasFillRule): void
設(shè)置封閉路徑為剪切路徑。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
path | Path2D | 是 | Path2D剪切路徑。 | |
fillRule | CanvasFillRule | 否 | "nonzero" | 指定要剪切對象的規(guī)則。 可選參數(shù)為:"nonzero", "evenodd"。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct Clip {
- 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(() =>{
- 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.offContext.clip(region,"evenodd")
- this.offContext.fillStyle = "rgb(0,255,0)"
- this.offContext.fillRect(0, 0, 600, 600)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
filter(filter: string): void
為Canvas圖形設(shè)置各類濾鏡效果。該接口為空接口。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 說明 |
---|---|---|---|---|
filter | string | 是 | - | 接受各類濾鏡效果的函數(shù)。 |
getTransform(): Matrix2D
獲取當(dāng)前被應(yīng)用到上下文的轉(zhuǎn)換矩陣。該接口為空接口。
從API version 9開始,該接口支持在ArkTS卡片中使用。
resetTransform(): void
使用單位矩陣重新設(shè)置當(dāng)前變形。該接口為空接口。
從API version 9開始,該接口支持在ArkTS卡片中使用。
direction(direction: CanvasDirection): void
繪制文本時(shí),描述當(dāng)前文本方向的屬性。該接口為空接口。
從API version 9開始,該接口支持在ArkTS卡片中使用。
rotate(angle: number): void
針對當(dāng)前坐標(biāo)軸進(jìn)行順時(shí)針旋轉(zhuǎn)。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
angle | number | 是 | 0 | 設(shè)置順時(shí)針旋轉(zhuǎn)的弧度值,可以通過Math.PI / 180將角度轉(zhuǎn)換為弧度值。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct Rotate {
- 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(() =>{
- this.offContext.rotate(45 * Math.PI / 180)
- this.offContext.fillRect(70, 20, 50, 50)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
scale(x: number, y: number): void
設(shè)置canvas畫布的縮放變換屬性,后續(xù)的繪制操作將按照縮放比例進(jìn)行縮放。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
x | number | 是 | 0 | 設(shè)置水平方向的縮放值。 |
y | number | 是 | 0 | 設(shè)置垂直方向的縮放值。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct Scale {
- 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(() =>{
- this.offContext.lineWidth = 3
- this.offContext.strokeRect(30, 30, 50, 50)
- this.offContext.scale(2, 2) // Scale to 200%
- this.offContext.strokeRect(30, 30, 50, 50)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
transform(a: number, b: number, c: number, d: number, e: number, f: number): void
transform方法對應(yīng)一個(gè)變換矩陣,想對一個(gè)圖形進(jìn)行變化的時(shí)候,只要設(shè)置此變換矩陣相應(yīng)的參數(shù),對圖形的各個(gè)定點(diǎn)的坐標(biāo)分別乘以這個(gè)矩陣,就能得到新的定點(diǎn)的坐標(biāo)。矩陣變換效果可疊加。
從API version 9開始,該接口支持在ArkTS卡片中使用。
變換后的坐標(biāo)計(jì)算方式(x和y為變換前坐標(biāo),x'和y'為變換后坐標(biāo)):
x' = scaleX * x + skewY * y + translateX
y' = skewX * x + scaleY * y + translateY
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
a | number | 是 | 0 | scaleX: 指定水平縮放值。 |
b | number | 是 | 0 | skewX: 指定水平傾斜值。 |
c | number | 是 | 0 | skewY: 指定垂直傾斜值。 |
d | number | 是 | 0 | scaleY: 指定垂直縮放值。 |
e | number | 是 | 0 | translateX: 指定水平移動(dòng)值。 |
f | number | 是 | 0 | translateY: 指定垂直移動(dòng)值。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct Transform {
- 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(() =>{
- this.offContext.fillStyle = 'rgb(0,0,0)'
- this.offContext.fillRect(0, 0, 100, 100)
- this.offContext.transform(1, 0.5, -0.5, 1, 10, 10)
- this.offContext.fillStyle = 'rgb(255,0,0)'
- this.offContext.fillRect(0, 0, 100, 100)
- this.offContext.transform(1, 0.5, -0.5, 1, 10, 10)
- this.offContext.fillStyle = 'rgb(0,0,255)'
- this.offContext.fillRect(0, 0, 100, 100)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void
setTransform方法使用的參數(shù)和transform()方法相同,但setTransform()方法會(huì)重置現(xiàn)有的變換矩陣并創(chuàng)建新的變換矩陣。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
a | number | 是 | 0 | scaleX: 指定水平縮放值。 |
b | number | 是 | 0 | skewX: 指定水平傾斜值。 |
c | number | 是 | 0 | skewY: 指定垂直傾斜值。 |
d | number | 是 | 0 | scaleY: 指定垂直縮放值。 |
e | number | 是 | 0 | translateX: 指定水平移動(dòng)值。 |
f | number | 是 | 0 | translateY: 指定垂直移動(dòng)值。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct SetTransform {
- 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(() =>{
- this.offContext.fillStyle = 'rgb(255,0,0)'
- this.offContext.fillRect(0, 0, 100, 100)
- this.offContext.setTransform(1,0.5, -0.5, 1, 10, 10)
- this.offContext.fillStyle = 'rgb(0,0,255)'
- this.offContext.fillRect(0, 0, 100, 100)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
translate(x: number, y: number): void
移動(dòng)當(dāng)前坐標(biāo)系的原點(diǎn)。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
x | number | 是 | 0 | 設(shè)置水平平移量。 |
y | number | 是 | 0 | 設(shè)置豎直平移量。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct Translate {
- 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(() =>{
- this.offContext.fillRect(10, 10, 50, 50)
- this.offContext.translate(70, 70)
- this.offContext.fillRect(10, 10, 50, 50)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
drawImage(image: ImageBitmap | PixelMap, dx: number, dy: number): void
drawImage(image: ImageBitmap | PixelMap, dx: number, dy: number, dw: number, dh: number): void
drawImage(image: ImageBitmap | PixelMap, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number):void
進(jìn)行圖像繪制。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
image | 是 | null | 圖片資源,請參考ImageBitmap或PixelMap。 | |
sx | number | 否 | 0 | 裁切源圖像時(shí)距離源圖像左上角的x坐標(biāo)值。 |
sy | number | 否 | 0 | 裁切源圖像時(shí)距離源圖像左上角的y坐標(biāo)值。 |
sw | number | 否 | 0 | 裁切源圖像時(shí)需要裁切的寬度。 |
sh | number | 否 | 0 | 裁切源圖像時(shí)需要裁切的高度。 |
dx | number | 是 | 0 | 繪制區(qū)域左上角在x軸的位置。 |
dy | number | 是 | 0 | 繪制區(qū)域左上角在y 軸的位置。 |
dw | number | 否 | 0 | 繪制區(qū)域的寬度。 |
dh | number | 否 | 0 | 繪制區(qū)域的高度。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct DrawImage {
- private settings: RenderingContextSettings = new RenderingContextSettings(true)
- private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
- private img:ImageBitmap = new ImageBitmap("common/images/icon.jpg")
- 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(() => {
- this.offContext.drawImage( this.img,0,0,400,200)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
createImageData(sw: number, sh: number): ImageData
根據(jù)寬高創(chuàng)建ImageData對象,請參考ImageData。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn) | 描述 |
---|---|---|---|---|
sw | number | 是 | 0 | ImageData的寬度。 |
sh | number | 是 | 0 | ImageData的高度。 |
createImageData(imageData: ImageData): ImageData
根據(jù)已創(chuàng)建的ImageData對象創(chuàng)建新的ImageData對象,請參考ImageData。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn) | 描述 |
---|---|---|---|---|
imagedata | 是 | null | 被復(fù)制的ImageData對象。 |
返回值:
類型 | 說明 |
---|---|
新的ImageData對象 |
getPixelMap(sx: number, sy: number, sw: number, sh: number): PixelMap
以當(dāng)前canvas指定區(qū)域內(nèi)的像素創(chuàng)建PixelMap對象。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
sx | number | 是 | 0 | 需要輸出的區(qū)域的左上角x坐標(biāo)。 |
sy | number | 是 | 0 | 需要輸出的區(qū)域的左上角y坐標(biāo)。 |
sw | number | 是 | 0 | 需要輸出的區(qū)域的寬度。 |
sh | number | 是 | 0 | 需要輸出的區(qū)域的高度。 |
返回值:
類型 | 說明 |
---|---|
新的PixelMap對象 |
setPixelMap(value?: PixelMap): void
將當(dāng)前傳入PixelMap對象繪制在畫布上。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
sx | number | 是 | 0 | 需要輸出的區(qū)域的左上角x坐標(biāo)。 |
sy | number | 是 | 0 | 需要輸出的區(qū)域的左上角y坐標(biāo)。 |
sw | number | 是 | 0 | 需要輸出的區(qū)域的寬度。 |
sh | number | 是 | 0 | 需要輸出的區(qū)域的高度。 |
返回值:
類型 | 說明 |
---|---|
新的PixelMap對象 |
getImageData(sx: number, sy: number, sw: number, sh: number): ImageData
以當(dāng)前canvas指定區(qū)域內(nèi)的像素創(chuàng)建ImageData對象。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
sx | number | 是 | 0 | 需要輸出的區(qū)域的左上角x坐標(biāo)。 |
sy | number | 是 | 0 | 需要輸出的區(qū)域的左上角y坐標(biāo)。 |
sw | number | 是 | 0 | 需要輸出的區(qū)域的寬度。 |
sh | number | 是 | 0 | 需要輸出的區(qū)域的高度。 |
返回值:
類型 | 說明 |
---|---|
新的ImageData對象 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct GetImageData {
- private settings: RenderingContextSettings = new RenderingContextSettings(true)
- private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
- private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings)
- private img:ImageBitmap = new ImageBitmap("/common/images/1234.png")
- build() {
- Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
- Canvas(this.context)
- .width('100%')
- .height('100%')
- .backgroundColor('#ffff00')
- .onReady(() =>{
- this.offContext.drawImage(this.img,0,0,130,130)
- var imagedata = this.offContext.getImageData(50,50,130,130)
- this.offContext.putImageData(imagedata,150,150)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
putImageData(imageData: Object, dx: number, dy: number): void
putImageData(imageData: Object, dx: number, dy: number, dirtyX: number, dirtyY: number, dirtyWidth?: number, dirtyHeight: number): void
使用ImageData數(shù)據(jù)填充新的矩形區(qū)域。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
imagedata | Object | 是 | null | 包含像素值的ImageData對象。 |
dx | number | 是 | 0 | 填充區(qū)域在x軸方向的偏移量。 |
dy | number | 是 | 0 | 填充區(qū)域在y軸方向的偏移量。 |
dirtyX | number | 否 | 0 | 源圖像數(shù)據(jù)矩形裁切范圍左上角距離源圖像左上角的x軸偏移量。 |
dirtyY | number | 否 | 0 | 源圖像數(shù)據(jù)矩形裁切范圍左上角距離源圖像左上角的y軸偏移量。 |
dirtyWidth | number | 否 | imagedata的寬度 | 源圖像數(shù)據(jù)矩形裁切范圍的寬度。 |
dirtyHeight | number | 否 | imagedata的高度 | 源圖像數(shù)據(jù)矩形裁切范圍的高度。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct PutImageData {
- 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%')
- }
- }
setLineDash(segments: number[]): void
設(shè)置畫布的虛線樣式。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 描述 |
---|---|---|
segments | number[] | 描述線段如何交替和線段間距長度的數(shù)組。 |
示例:
- @Entry
- @Component
- struct SetLineDash {
- 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(() =>{
- this.offContext.arc(100, 75, 50, 0, 6.28)
- this.offContext.setLineDash([10,20])
- this.offContext.stroke()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
getLineDash(): number[]
獲得當(dāng)前畫布的虛線樣式。
從API version 9開始,該接口支持在ArkTS卡片中使用。
返回值:
類型 | 說明 |
---|---|
number[] | 返回?cái)?shù)組,該數(shù)組用來描述線段如何交替和間距長度。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct OffscreenCanvasGetLineDash {
- @State message: string = 'Hello World'
- private settings: RenderingContextSettings = new RenderingContextSettings(true)
- private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
- private offContext: OffscreenCanvasRenderingContext2D = new OffscreenCanvasRenderingContext2D(600, 600, this.settings)
- build() {
- Row() {
- Column() {
- Text(this.message)
- .fontSize(50)
- .fontWeight(FontWeight.Bold)
- .onClick(()=>{
- console.error('before getlinedash clicked')
- let res = this.offContext.getLineDash()
- console.error(JSON.stringify(res))
- })
- Canvas(this.context)
- .width('100%')
- .height('100%')
- .backgroundColor('#ffff00')
- .onReady(() => {
- this.offContext.arc(100, 75, 50, 0, 6.28)
- this.offContext.setLineDash([10,20])
- this.offContext.stroke()
- let res = this.offContext.getLineDash()
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- }
- .height('100%')
- }
- }
toDataURL(type?: string, quality?: number): string
生成一個(gè)包含圖片展示的URL。
從API version 9開始,該接口支持在ArkTS卡片中使用。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù)名 | 參數(shù)類型 | 必填 | 描述 |
---|---|---|---|
type | string | 否 | 可選參數(shù),用于指定圖像格式,默認(rèn)格式為image/png。 |
quality | number | 否 | 在指定圖片格式為image/jpeg或image/webp的情況下,可以從0到1的區(qū)間內(nèi)選擇圖片的質(zhì)量。如果超出取值范圍,將會(huì)使用默認(rèn)值0.92。 |
返回值:
類型 | 說明 |
---|---|
string | 圖像的URL地址。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct ToDataURL {
- 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 dataURL = this.offContext.toDataURL()
- })
- }
- .width('100%')
- .height('100%')
- }
- }
imageSmoothingQuality(quality: imageSmoothingQuality)
用于設(shè)置圖像平滑度。該接口為空接口。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 描述 |
---|---|---|
quality | imageSmoothingQuality | 支持如下三種類型:'low', 'medium', 'high'。 |
transferToImageBitmap(): ImageBitmap
在離屏畫布最近渲染的圖像上創(chuàng)建一個(gè)ImageBitmap對象。
從API version 9開始,該接口支持在ArkTS卡片中使用。
返回值:
類型 | 說明 |
---|---|
存儲(chǔ)離屏畫布上渲染的像素?cái)?shù)據(jù)。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct PutImageData {
- 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%')
- }
- }
restore(): void
對保存的繪圖上下文進(jìn)行恢復(fù)。
從API version 9開始,該接口支持在ArkTS卡片中使用。
示例:
- // xxx.ets
- @Entry
- @Component
- struct CanvasExample {
- 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(() =>{
- this.offContext.save() // save the default state
- this.offContext.fillStyle = "#00ff00"
- this.offContext.fillRect(20, 20, 100, 100)
- this.offContext.restore() // restore to the default state
- this.offContext.fillRect(150, 75, 100, 100)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
save(): void
對當(dāng)前的繪圖上下文進(jìn)行保存。
從API version 9開始,該接口支持在ArkTS卡片中使用。
示例:
- // xxx.ets
- @Entry
- @Component
- struct CanvasExample {
- 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(() =>{
- this.offContext.save() // save the default state
- this.offContext.fillStyle = "#00ff00"
- this.offContext.fillRect(20, 20, 100, 100)
- this.offContext.restore() // restore to the default state
- this.offContext.fillRect(150, 75, 100, 100)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
createLinearGradient(x0: number, y0: number, x1: number, y1: number): void
創(chuàng)建一個(gè)線性漸變色。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
x0 | number | 是 | 0 | 起點(diǎn)的x軸坐標(biāo)。 |
y0 | number | 是 | 0 | 起點(diǎn)的y軸坐標(biāo)。 |
x1 | number | 是 | 0 | 終點(diǎn)的x軸坐標(biāo)。 |
y1 | number | 是 | 0 | 終點(diǎn)的y軸坐標(biāo)。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct CreateLinearGradient {
- 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 grad = this.offContext.createLinearGradient(50,0, 300,100)
- grad.addColorStop(0.0, '#ff0000')
- grad.addColorStop(0.5, '#ffffff')
- grad.addColorStop(1.0, '#00ff00')
- this.offContext.fillStyle = grad
- this.offContext.fillRect(0, 0, 400, 400)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): void
創(chuàng)建一個(gè)徑向漸變色。
從API version 9開始,該接口支持在ArkTS卡片中使用。
參數(shù):
參數(shù) | 類型 | 必填 | 默認(rèn)值 | 描述 |
---|---|---|---|---|
x0 | number | 是 | 0 | 起始圓的x軸坐標(biāo)。 |
y0 | number | 是 | 0 | 起始圓的y軸坐標(biāo)。 |
r0 | number | 是 | 0 | 起始圓的半徑。必須是非負(fù)且有限的。 |
x1 | number | 是 | 0 | 終點(diǎn)圓的x軸坐標(biāo)。 |
y1 | number | 是 | 0 | 終點(diǎn)圓的y軸坐標(biāo)。 |
r1 | number | 是 | 0 | 終點(diǎn)圓的半徑。必須為非負(fù)且有限的。 |
示例:
- // xxx.ets
- @Entry
- @Component
- struct CreateRadialGradient {
- 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 grad = this.offContext.createRadialGradient(200,200,50, 200,200,200)
- grad.addColorStop(0.0, '#ff0000')
- grad.addColorStop(0.5, '#ffffff')
- grad.addColorStop(1.0, '#00ff00')
- this.offContext.fillStyle = grad
- this.offContext.fillRect(0, 0, 400, 400)
- var image = this.offContext.transferToImageBitmap()
- this.context.transferFromImageBitmap(image)
- })
- }
- .width('100%')
- .height('100%')
- }
- }
更多建議: