HarmonyOS 鸿蒙Next使用Canvas.drawPixelMapHolder()方法在屏幕上没有显示位图

发布于 1周前 作者 h691938207 来自 鸿蒙OS

HarmonyOS 鸿蒙Next使用Canvas.drawPixelMapHolder()方法在屏幕上没有显示位图

public PixelMap getPixelMap(String pathName){
    ImageSource.SourceOptions sourceOptions = new ImageSource.SourceOptions();
    sourceOptions.formatHint = "image/png";
    ImageSource imageSource = ImageSource.create(pathName, sourceOptions);
    ImageSource.DecodingOptions decodingOptions = new ImageSource.DecodingOptions();
    decodingOptions.desiredSize = new Size(30, 30);
    decodingOptions.desiredRegion = new Rect(0, 0, 100, 100);
    decodingOptions.desiredPixelFormat = PixelFormat.ARGB_8888;
    return imageSource.createPixelmap(decodingOptions);
}

public void initialize(){
    layout = new DirectionalLayout(this);
    layout.setLayoutConfig((new ComponentContainer.LayoutConfig(ComponentContainer.LayoutConfig.MATCH_PARENT,ComponentContainer.LayoutConfig.MATCH_PARENT)));
    Component.DrawTask task=new Component.DrawTask() {
        public void onDraw(Component component, Canvas canvas) {
            Paint paint = new Paint();
            paint.setColor(Color.RED);
            PixelMap pixelmap = getPixelMap("pics/bomb.png");
            PixelMapHolder pixelmapholder = new PixelMapHolder(pixelmap);
            canvas.drawPixelMapHolder(pixelmapholder,0,0,paint);
        }
    };
    layout.addDrawTask(task);
    setUIContent(layout);
}

如上面代码段,在onStart方法中使用initialize()方法,但是经虚拟设备运行后的页面如下所示,没有显示位图,请问是哪里出现了问题呢?
![](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/031/109/113/0070086000031109113.20220415105344.96922098585658849092492119502853:50001231000000:2800:8804C7B83C01193AF6173901A342994C7CB1087B593D95A6BF44BD3AF95B6215.png)

更多关于HarmonyOS 鸿蒙Next使用Canvas.drawPixelMapHolder()方法在屏幕上没有显示位图的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

好像已经不在主线程中(UI线程),换到主线程试试

更多关于HarmonyOS 鸿蒙Next使用Canvas.drawPixelMapHolder()方法在屏幕上没有显示位图的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


好像只支持jpg格式,你修改图片格式看看

修改图片格式还是没有用,png格式好像也是支持的,

你这样写相对路径,获取不到图片吧,

官方文档的例子就是用相对路径……不过我用资源id作为ImageSource.create()的参数,能够成功显示图片了,非常感谢,

期待HarmonyOS能继续优化多屏协同功能,让跨设备体验更加完美。

欢迎开发小伙伴们进来帮帮楼主

检查创建组件是否正确,获取pixelMap的方法参考https://developer.huawei.com/consumer/cn/forum/topic/0201603780244880946?fid=0102683795438680754

在HarmonyOS鸿蒙系统中,使用Canvas.drawPixelMapHolder()方法在屏幕上没有显示位图的问题,可能由以下几个原因造成:

  1. 位图资源未正确加载:确保位图资源已经正确加载到PixelMapHolder对象中。检查位图路径、文件名及格式是否正确,以及资源文件是否已包含在项目的资源目录中。

  2. 绘制逻辑错误:检查Canvas.drawPixelMapHolder()的调用是否在正确的绘制时机和上下文中进行。例如,确保在组件的onDraw()方法中调用,并且Canvas对象处于有效状态。

  3. 显示区域问题:验证位图绘制的坐标和尺寸是否超出了显示区域。如果位图被绘制在屏幕外或尺寸被设置为0,它将不会显示。

  4. 图层覆盖:检查是否有其他UI元素(如其他组件或背景)覆盖了绘制的位图。调整图层顺序或透明度可能有助于解决问题。

  5. 性能优化:在某些情况下,系统可能出于性能优化考虑,对绘制操作进行了裁剪或合并。确保绘制操作符合系统的性能优化策略。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部