HarmonyOS 鸿蒙Next CanvasRenderingContext2D 绘制图片drawImage不显示
HarmonyOS 鸿蒙Next CanvasRenderingContext2D 绘制图片drawImage不显示
Canvas(this.context)
.width(150)
.alignRules(centerParent())
.height(150)
.backgroundColor('#ffff00')
.onReady(() => {
let offContext = this.offCanvas.getContext("2d", this.settings)
let ib = new ImageBitmap(`https://www.baidu.com/img/flexible/logo/pc/result.png`)
offContext.drawImage(ib, 0, 0, 130, 130)
let pixelmap = offContext.getPixelMap(150, 150, 130, 130)
offContext.setPixelMap(pixelmap)
let image = this.offCanvas.transferToImageBitmap()
this.context.transferFromImageBitmap(image)
})
参考的文档地址: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-offscreencanvasrenderingcontext2d-V5 自定义的画布画矩形。圆形。线条。文字都可以,就是图片不可以经调试代码有调用,但图片未显示
更多关于HarmonyOS 鸿蒙Next CanvasRenderingContext2D 绘制图片drawImage不显示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
请参考以下代码
// xxx.ets
@Entry
@Component
struct ImageSmoothingEnabled {
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
private offCanvas: OffscreenCanvas = new OffscreenCanvas(600, 600)
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Stack(){
Text('绘制图片drawImage测试')
.fontSize(100)
Canvas(this.context)
.width(150)
.height(150)
.backgroundColor('#ffff00')
.onReady(()=>{
let offContext = this.offCanvas.getContext("2d", this.settings)
let ib = new ImageBitmap(`https://www.baidu.com/img/flexible/logo/pc/result.png`)
offContext.drawImage(ib, 0, 0, 130, 130)
let pixelmap = offContext.getPixelMap(150, 150, 130, 130)
offContext.setPixelMap(pixelmap)
let image = this.offCanvas.transferToImageBitmap()
this.context.transferFromImageBitmap(image)
})
}
}
.width('100%')
.height('100%')
}
}
和地图关联到一起就算不是画到地图上同样会导致绘制图片失败,能否提供下失败的日志
用Stack组件将地图和canvas包在一起,绘制图片就可以显示,参考以下demo
import { MapComponent, MapController, MapOptions, MapStatus, SysEnum } from '@bdmap/map';
import { bundleManager } from '@kit.AbilityKit';
@Entry
@Component
struct Index {
callback?: (err: ESObject, mapController: MapController) => Promise<void>;
mapController?: MapController;
@State message: string = 'Hello World';
// 设置地图控件参数
mapOpt: MapOptions = new MapOptions({
// 配置地图状态,如地图缩放等级、显示中心点、旋转角等
mapStatus: new MapStatus({}),
// 默认基础地图,可通过改变satelliteMap的值加载不同的底图
shows: { satelliteMap: SysEnum.ESatelliteLayerType.NONE }
});
aboutToAppear(): void {
// 地图初始化的回调
this.callback = async (err:ESObject, mapController:MapController) => {
if (!err) {
// 获取地图的控制器类,用来操作地图
this.mapController= mapController;
}
};
}
build() {
Stack() {
MapComponent({ onReady: this.callback, mapOptions: this.mapOpt }).width('100%').height('100%')
CanvasCom()
}
.height('100%')
.width('100%')
}
}
@Component
export struct CanvasCom {
@State message: string = 'Hello World';
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
private img: ImageBitmap = new ImageBitmap("")
private offCanvas: OffscreenCanvas = new OffscreenCanvas(600, 600)
build() {
RelativeContainer() {
Canvas(this.context)
.width(150)
//.alignRules(centerParent())
.height(150)
.backgroundColor('#ffff00')
.onReady(() => {
let offContext = this.offCanvas.getContext("2d", this.settings)
let ib = new ImageBitmap(`https://www.baidu.com/img/flexible/logo/pc/result.png`)
offContext.drawImage(ib, 0, 0, 130, 130)
let pixelmap = offContext.getPixelMap(150, 150, 130, 130)
offContext.setPixelMap(pixelmap)
let image = this.offCanvas.transferToImageBitmap()
this.context.transferFromImageBitmap(image)
})
}
.height('100%')
.width('100%')
}
}
更多关于HarmonyOS 鸿蒙Next CanvasRenderingContext2D 绘制图片drawImage不显示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对HarmonyOS鸿蒙系统中Next CanvasRenderingContext2D的drawImage方法不显示图片的问题,可能的原因及解决方法如下:
-
图片资源未正确加载:
- 确保图片资源已正确加载到应用中,且路径无误。
- 检查图片格式是否被鸿蒙系统支持(如PNG、JPEG等)。
-
绘制上下文未正确设置:
- 确认Canvas元素已被正确初始化,并且其尺寸适合绘制。
- 检查Canvas的可见性,确保它没有被CSS隐藏或遮挡。
-
drawImage方法使用不当:
- 验证drawImage方法的参数是否正确,包括图片对象、源矩形、目标矩形等。
- 如果使用了异步加载图片(如通过fetch或XMLHttpRequest),确保drawImage在图片加载完成后调用。
-
系统或框架bug:
- 检查是否为鸿蒙系统的已知问题或框架的bug。
- 查阅鸿蒙系统的官方文档或更新日志,看是否有相关修复。
如果以上方法均未能解决问题,可能是由于特定场景或代码实现中的其他问题。此时,建议直接联系鸿蒙系统的技术支持或查阅更多专业资源。如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html