HarmonyOS 鸿蒙Next保存图片到相册PixelMap和buffer相互转换的问题
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相互转换的问题,以下是一些专业解答:
-
保存图片到相册:
- HarmonyOS提供了丰富的API来支持图片保存到相册。你可以使用
photoAccessHelper
和fs
模块来实现。首先,通过photoAccessHelper.getPhotoAccessHelper
获取相册访问帮助类,然后使用createAsset
方法创建图片资源,并通过fs.open
和fs.write
将图片数据写入该资源。
- HarmonyOS提供了丰富的API来支持图片保存到相册。你可以使用
-
Pixel和Buffer相互转换:
- PixelMap转ArrayBuffer:使用
PixelMap
的readPixelsToBuffer
方法可以将像素数据读取到ArrayBuffer
中。确保ArrayBuffer
的大小足以容纳所有像素数据。 - ArrayBuffer转PixelMap:首先,使用
image.createImageSource
从ArrayBuffer
创建ImageSource
,然后调用createPixelMap
方法并传入适当的选项(如尺寸、像素格式等)来生成PixelMap
。
- PixelMap转ArrayBuffer:使用
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。在这里,你可以找到更多专业的技术支持和解决方案。