HarmonyOS 鸿蒙Next PixelMap 创建失败

发布于 1周前 作者 wuwangju 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next PixelMap 创建失败

通过本地文件的图片(  /data/storage/el2/base/haps/entry/files/2/8/keyImg/2410  )创建PixelMap失败,请问是什么原因  Create PixelMap error

文件在压缩包中

public static async removeByte(filePath: string): Promise<PixelMap | null> {

  if (!fs.accessSync(filePath)) {

  return null;

}

let buf: ArrayBuffer = new ArrayBuffer(0)

try {

  // 打开文件流

  let inputStream = fs.createStreamSync(filePath, 'r+');

  let bufSize = fs.statSync(filePath).size;

  buf = new ArrayBuffer(bufSize);

  class Option {

    public offset: number = 0;

    public length: number = bufSize;

  }

  let option = new Option();

  let readLen = inputStream.readSync(buf, option);

  // 关闭文件流

  inputStream.closeSync();

} catch (e) {

  console.log(`错误:${e}`)

}

let imageSource: image.ImageSource = image.createImageSource(buf);

class tmp {

  height: number = 100

  width: number = 100

}

let options: Record<string, number | boolean | tmp> = {

  'alphaType': 0, // 透明度

  'editable': false, // 是否可编辑

  'pixelFormat': 3, // 像素格式

  'scaleMode': 1, // 缩略值

  'size': { height: 100, width: 100 }

} // 创建图片大小

let res: PixelMap | null = null;

try {

  res = await imageSource.createPixelMap(options);

} catch (e) {

  console.log("1")

}

return res;

}

更多关于HarmonyOS 鸿蒙Next PixelMap 创建失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

参考demo 通过image.createImageSource(uri) 创建图片源实例时,uri仅支持应用沙箱路径;

也可以通过image.createImageSource(fd),通过传入文件描述符来创建图片源实例;

通过传入文件描述符来创建图片源实例

let imageSource: image.ImageSource = image.createImageSource(file.fd);
 let imageInfo: image.ImageInfo = await imageSource.getImageInfo(); 
let pixelMap: image.PixelMap = await imageSource.createPixelMap(); 

关于image.createImageSource(fd)的使用可参考官方文档: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-image-V5#imagecreateimagesource

import image from '@ohos.multimedia.image';
import fs from '@ohos.file.fs';
const context: Context = getContext();
@Entry
@Component
struct Index {
  context = getContext(this);
  @State pixmap: PixelMap | undefined = undefined;
  aboutToAppear(): void {
    context.resourceManager.getRawFileContent('food.png', (_err, value) => {
      let myBuffer: ArrayBufferLike = value.buffer
      let file = fs.openSync(context.filesDir + "/food.png", fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
      let writeLen = fs.writeSync(file.fd, myBuffer);
      console.info("写入数据和文件成功:" + writeLen);
      fs.closeSync(file);
    });
  }
  build() {
    Row() {
      Column() {
        Button('沙箱图片转PixelMap')
          .margin({ bottom: 20 })
          .onClick(async () => {
            let filePath = context.filesDir + "/food.png";
            try {
              let file = fs.openSync(context.filesDir + "/food.png", fs.OpenMode.READ_WRITE);
              let buf = new ArrayBuffer(4096);
              fs.readSync(file.fd, buf);
              // 获取resourceManager资源管理器
              const resourceMgr = this.context.resourceManager;
              // 获取rawfile文件夹下icon.png的ArrayBuffer。
              const fileData = await resourceMgr.getRawFileContent("food.png");
              // 获取图片的ArrayBuffer
              const buffer = fileData.buffer;
              // 创建imageSource。
              const imageSource = image.createImageSource(filePath);
              // 创建PixelMap
              this.pixmap = await imageSource.createPixelMap();
            } catch (err) {
            }
          })
        Image(this.pixmap)
          .height(60)
          .width(60)
          .objectFit(ImageFit.Contain)
      }
      .width('100%')
    }
    .height('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next PixelMap 创建失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS中,如果遇到Next PixelMap创建失败的问题,通常涉及资源加载或内存分配异常。具体排查步骤如下:

  1. 资源文件检查

    • 确认PixelMap资源文件是否存在且路径正确。
    • 检查资源文件是否损坏或格式不支持。
  2. 内存与性能

    • 评估当前系统内存使用情况,确保有足够的内存来加载新的PixelMap。
    • 检查是否存在内存泄漏导致资源分配失败。
  3. 加载方式

    • 确认是否使用了正确的加载方法,如PixelMapFactory.DecodeFile等。
    • 如果使用了异步加载,确保回调处理正确且没有异常中断。
  4. 权限问题

    • 检查应用是否已获取读取资源文件的必要权限。
  5. 日志与异常

    • 查看系统日志,定位创建PixelMap失败时的具体错误信息。
    • 分析异常堆栈,找出导致问题的代码位置。
  6. 代码检查

    • 复查PixelMap创建代码,确保逻辑正确且符合HarmonyOS API规范。

如果上述步骤均未能解决问题,可能是系统或框架层面的bug。此时,请尝试重启设备或更新HarmonyOS系统至最新版本。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部