HarmonyOS 鸿蒙Next保存图片到相册PixelMap和buffer相互转换的问题

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

HarmonyOS 鸿蒙Next保存图片到相册的问题,以及pixel和buffer相互转换的问题

// 我的需求是:将pixel数据转换为buffer,再将buffer保存到相册

const resourceMgr = getContext(this).resourceManager;
let imageBuffer = await resourceMgr.getMediaContent($r(“app.media.test”))
// 直接保存这个imageBuffer.buffer到相册是成功的


// 接下来要测试:将上面的图片转为pixel,再转为buffer,并保存到相册
let source: image.ImageSource = image.createImageSource(imageBuffer.buffer)
let pixel: PixelMap = await source.createPixelMap()
const buffer = new ArrayBuffer(pixel.getPixelBytesNumber());
await pixel.readPixelsToBuffer(buffer).then(async ()=>{
let file = await fs.open(value, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
fs.writeSync(file.fd, buffer);
fs.closeSync(file);
promptAction.showToast({ message: ‘已保存至相册’ })
})

// 然而不知道哪一步出了问题,得到的图片空白的,但是却有文件size

2 回复
试一下imagePackerApi.packing来转化buffer 可以测试一下你获取到的pixelMap能否在Image组件中显示,确保pixelMap是正确的

uri = fileUri.getUriFromPath(uri)
const imagePackerApi = image.createImagePacker();
let packOpts : image.PackingOption= { format:"image/jpeg", quality:100 };
let buffer : ArrayBuffer = await imagePackerApi.packing(pixelMap, packOpts)
let file : fileIo.File = fs.openSync(uri, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
fs.writeSync(file.fd,buffer);
fs.close(file);

关于HarmonyOS 鸿蒙Next保存图片到相册以及Pixel和Buffer相互转换的问题,以下是一些专业解答:

  1. 保存图片到相册

    • HarmonyOS提供了丰富的API来支持图片保存到相册。你可以使用photoAccessHelperfs模块来实现。首先,通过photoAccessHelper.getPhotoAccessHelper获取相册访问帮助类,然后使用createAsset方法创建图片资源,并通过fs.openfs.write将图片数据写入该资源。
  2. Pixel和Buffer相互转换

    • PixelMap转ArrayBuffer:使用PixelMapreadPixelsToBuffer方法可以将像素数据读取到ArrayBuffer中。确保ArrayBuffer的大小足以容纳所有像素数据。
    • ArrayBuffer转PixelMap:首先,使用image.createImageSourceArrayBuffer创建ImageSource,然后调用createPixelMap方法并传入适当的选项(如尺寸、像素格式等)来生成PixelMap

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。在这里,你可以找到更多专业的技术支持和解决方案。

回到顶部