HarmonyOS鸿蒙Next中为什么drawimage没有显示出来
HarmonyOS鸿蒙Next中为什么drawimage没有显示出来

@Component
@Entry
export default struct WeightBmiComponent {
private settings: RenderingContextSettings = new RenderingContextSettings(true);
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
private offCanvas: OffscreenCanvas = new OffscreenCanvas(600, 600);
// "/common/images/1234.png"需要替换为开发者所需的图像资源文件
private img: ImageBitmap = new ImageBitmap("../../resources/base/media/pic_arc.png");
private _drawBmi() {
let offContext = this.offCanvas.getContext("2d", this.settings)
// 使用drawImage接口将图片画在(0,0)为起点,宽高130的区域
offContext.drawImage(this.img, 0, 0, 130, 130);
// 使用getImageData接口,获得canvas组件区域中,(50,50)为起点,宽高130范围内的绘制内容
let imageData = offContext.getImageData(50, 50, 130, 130);
// 使用putImageData接口将得到的ImageData画在起点为(150, 150)的区域中
offContext.putImageData(imageData, 150, 150);
// 将离屏绘制的内容画到canvas组件上
let image = this.offCanvas.transferToImageBitmap();
this.context.transferFromImageBitmap(image);
}
build() {
Column() {
Canvas(this.context)
.width('100%')
.height('100%')
.backgroundColor('#ffff00')
.onReady(() => {
this._drawBmi();
})
.width('100%')
.height('100%')
}.width('100%')
.height('100%')
}
}
更多关于HarmonyOS鸿蒙Next中为什么drawimage没有显示出来的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
在HarmonyOS Next中,drawImage未显示通常由以下原因导致:
- 图像资源路径错误或未正确放置在resources/base/media目录
- Canvas绘制时机不当,组件未完成布局时进行绘制
- 图像尺寸超过Canvas绘制区域范围
- 硬件加速兼容性问题
检查要点:
- 使用$r(‘app.media.image’)方式引用资源
- 在onPageShow或组件布局完成后调用绘制方法
- 确认Canvas尺寸与图像尺寸匹配
- 检查控制台是否有相关错误日志
可通过设置图像加载监听和添加绘制边界检查来定位具体问题。
在HarmonyOS Next中,drawImage未显示通常是因为图像资源未正确加载或Canvas绘制时机问题。从代码分析:
- 图像加载问题:
ImageBitmap构造函数直接使用路径可能无法正确加载资源。建议使用资源管理器加载:
private img: image.ImageBitmap = resourceManager.getImageSync($r('app.media.pic_arc'));
- 绘制时机:
onReady回调中绘制是正确做法,但需确保图像已加载完成。可添加加载完成监听:
// 在build前添加
aboutToAppear() {
this.img.onload = () => {
this._drawBmi();
}
}
-
离屏Canvas尺寸:OffscreenCanvas(600,600)可能超出实际Canvas显示区域,建议与实际Canvas尺寸保持一致。
-
路径问题:原代码使用相对路径"…/…/resources/base/media/pic_arc.png",在HarmonyOS中应使用资源引用方式。
建议优先检查图像资源是否正确打包到应用中,并通过调试确认ImageBitmap是否成功创建。


