HarmonyOS鸿蒙Next中实现自定义相机拍照时,将buffer转pixelMap,测试结果转pixelMap失败,帮确认一下是什么问题!

HarmonyOS鸿蒙Next中实现自定义相机拍照时,将buffer转pixelMap,测试结果转pixelMap失败,帮确认一下是什么问题! 参考https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/camera-shooting-case-0000001774280058 ,实现自定义相机拍照;

将代码片段1改为片段2时,将buffer转pixelMap ,测试结果转pixelMap失败,帮确认一下是什么问题!

片段1

async function savePicture(buffer: ArrayBuffer, img: image.Image): Promise<void> {
  let accessHelper: photoAccessHelper.PhotoAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
  let options: photoAccessHelper.CreateOptions = {
    title: Date.now().toString()
  };
  let photoUri: string = await accessHelper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg', options);
  //createAsset的调用需要ohos.permission.READ_IMAGEVIDEO和ohos.permission.WRITE_IMAGEVIDEO的权限
  let file: fs.File = fs.openSync(photoUri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
  await fs.write(file.fd, buffer);
  fs.closeSync(file);
  img.release();
}

片段2

async function savePicture(buffer: ArrayBuffer, img: image.Image): Promise<void> {
  let opts: image.InitializationOptions = { editable: true, pixelFormat: 3, size: { height: 1080, width: 2336 } }
  image.createPixelMap(buffer, opts, (error: BusinessError, pixelMap: image.PixelMap) => {
  if (error) {
    console.info("error " + error)
    return;
  } else {
  console.info('Succeeded in creating pixelmap.');
 }
 })
}

更多关于HarmonyOS鸿蒙Next中实现自定义相机拍照时,将buffer转pixelMap,测试结果转pixelMap失败,帮确认一下是什么问题!的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

传入的buffer与 size的宽高有关

import { BusinessError } from '@ohos.base';

async function Demo() {
const color: ArrayBuffer = new ArrayBuffer(96); // 96为需要创建的像素buffer大小,取值为:height * width *4
let opts: image.InitializationOptions = { editable: true, pixelFormat: 3, size: { height: 4, width: 6 } }
image.createPixelMap(color, opts).then((pixelMap: image.PixelMap) => {
console.info('Succeeded in creating pixelmap.');
}).catch((error: BusinessError) => {
console.error('Failed to create pixelmap.');
})
}

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-image-V5#imagecreatepixelmap8

更多关于HarmonyOS鸿蒙Next中实现自定义相机拍照时,将buffer转pixelMap,测试结果转pixelMap失败,帮确认一下是什么问题!的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,将buffer转换为pixelMap失败可能有以下原因:

  1. Buffer格式不匹配:确保buffer的格式与pixelMap所需的格式一致,如RGB、RGBA等。

  2. Buffer大小问题:检查buffer的大小是否与预期的图像尺寸匹配,过大或过小都会导致转换失败。

  3. API使用错误:确认你使用的API是否正确,如PixelMap.createFromBuffer方法,参数是否按文档要求传递。

  4. 内存问题:系统内存不足可能导致转换失败,检查内存使用情况。

  5. 权限问题:确保应用有访问相机和存储的权限,缺少权限可能导致转换失败。

  6. 系统版本兼容性:某些API可能在不同系统版本中有差异,确认你的代码与当前系统版本兼容。

  7. 代码逻辑错误:检查代码逻辑,确保在正确的时间点进行buffer到pixelMap的转换。

建议检查上述因素,逐一排除问题。

在HarmonyOS鸿蒙Next中,bufferpixelMap失败可能由以下原因导致:

  1. Buffer格式不匹配:确认buffer的格式与pixelMap支持的格式一致,如RGBA_8888。
  2. Buffer大小不正确:确保buffer的大小与图像尺寸匹配,数据量不足会导致转换失败。
  3. 参数设置错误:检查ImageSourcePixelMap的创建参数,如宽度、高度、像素格式等是否与buffer一致。
  4. 内存问题:确保设备有足够内存处理图像数据,内存不足可能导致转换失败。

建议逐步检查这些参数,确保它们正确匹配。

回到顶部