HarmonyOS 鸿蒙Next 通过arraybuffer创建PixelMap时出现报错 Create PixelMap error
HarmonyOS 鸿蒙Next 通过arraybuffer创建PixelMap时出现报错 Create PixelMap error
photoOutput.on(‘photoAvailable’)事件获取到photo,再通过getComponent方法获取buffer,之后再通过CreateIncrementalSource创建imageSource,创建后,无法通过getImageInfo()获取照片信息,通过createPixelMap无法获取到正常数据。问题代码如下:
Image_ErrorCode packToFileFromPixelmapTest(uint8_t *buffer, size_t bufferSize, int fd) {
//创建ImagePacker实例
OH_ImagePackerNative *testPacker = nullptr;
Image_ErrorCode errCode = OH_ImagePackerNative_Create(&testPacker);
if (errCode != IMAGE_SUCCESS) {
OH_LOG_ERROR(LOG_APP, "ImagePackerNativeCTest CreatePacker OH_ImagePackerNative_Create failed, errCode: %{public}d.", errCode);
return errCode;
}
//创建Pixelmap实例
OH_Pixelmap_InitializationOptions *createOpts;
OH_PixelmapInitializationOptions_Create(&createOpts);
OH_PixelmapInitializationOptions_SetWidth(createOpts, 1280);
OH_PixelmapInitializationOptions_SetHeight(createOpts, 720);
OH_PixelmapInitializationOptions_SetPixelFormat(createOpts, 3);
OH_PixelmapInitializationOptions_SetAlphaType(createOpts, 0);
OH_PixelmapNative *pixelmap = nullptr;
errCode = OH_PixelmapNative_CreatePixelmap(buffer, bufferSize, createOpts, &pixelmap);
if (errCode != IMAGE_SUCCESS) {
OH_LOG_ERROR(LOG_APP, "ImagePackerNativeCTest OH_PixelmapNative_CreatePixelmap failed, errCode: %{public}d.", errCode);
return errCode;
}
//指定打包参数,将PixelMap图片源编码后直接打包进文件
OH_PackingOptions *option = nullptr;
OH_PackingOptions_Create(&option);
char type[] = "image/jpeg";
Image_MimeType image_MimeType = {type, strlen(type)};
OH_PackingOptions_SetMimeType(option, &image_MimeType);
errCode = OH_ImagePackerNative_PackToFileFromPixelmap(testPacker, option, pixelmap, fd);
if (errCode != IMAGE_SUCCESS) {
OH_LOG_ERROR(LOG_APP, "ImagePackerNativeCTest OH_ImagePackerNative_PackToFileFromPixelmap failed, errCode: %{public}d.", errCode);
return errCode;
}
//释放ImagePacker实例
errCode = OH_ImagePackerNative_Release(testPacker);
if (errCode != IMAGE_SUCCESS)
{
OH_LOG_ERROR(LOG_APP, "ImagePackerNativeCTest ReleasePacker OH_ImagePackerNative_Release failed, errCode: %{public}d.", errCode);
return errCode;
}
//释放Pixelmap实例
errCode = OH_PixelmapNative_Release(pixelmap);
if (errCode != IMAGE_SUCCESS)
{
OH_LOG_ERROR(LOG_APP, "ImagePackerNativeCTest ReleasePacker OH_PixelmapNative_Release failed, errCode: %{public}d.", errCode);
return errCode;
}
return IMAGE_SUCCESS;
}
更多关于HarmonyOS 鸿蒙Next 通过arraybuffer创建PixelMap时出现报错 Create PixelMap error的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
createPixelMap支持传入ArrayBuffer的类型,但必须是未解码的数据。例如不支持RBGA,YUV的像素buffer数据。可通过image.createPixelMap接口实现像素buffer数据创建pixelMap。如下:
const imageSourceApi : image.ImageSource = image.createImageSource(buffer);
let imgInfo = await imageSourceApi .getImageInfo()
let imgPixelMap = await imageSourceApi .createPixelMap(decodingOptions)
let newBuf = new ArrayBuffer(imgPixelMap.getPixelBytesNumber())
imgPixelMap.readPixelsToBuffer(newBuf)
获取到buff后,需要用packing 解码后再保存图片:
const imagePackerApi : image.ImagePacker = image.createImagePacker();
let opts : image.InitializationOptions = { editable: true, pixelFormat: 3, size: { height: 4, width: 6 } }
image.createPixelMap(color, opts).then((pixelMap : image.PixelMap) => {
let packOpts : image.PackingOption = { format:"image/jpeg", quality:98 }
imagePackerApi.packing(pixelMap, packOpts).then( (data : ArrayBuffer) => {
console.info('Succeeded in packing the image.');
}).catch((error : BusinessError) => {
console.error('Failed to pack the image..');
})
}).catch((error : BusinessError) => {
console.error('createPixelMap failed.');
})
更多关于HarmonyOS 鸿蒙Next 通过arraybuffer创建PixelMap时出现报错 Create PixelMap error的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙系统中,使用ArrayBuffer来创建PixelMap时遇到“Create PixelMap error”的错误,通常与以下几个因素有关:
-
ArrayBuffer的数据格式:确保ArrayBuffer中的数据格式与PixelMap所需的格式一致。比如,PixelMap通常要求特定的像素格式(如RGBA_8888),如果数据格式不匹配,会导致创建失败。
-
数据完整性:检查ArrayBuffer中的数据是否完整且未损坏。不完整的数据会导致PixelMap无法正确解析和创建。
-
内存权限:确保应用有权限访问和操作所需的内存区域。在某些系统中,如果没有足够的权限访问ArrayBuffer或PixelMap所需的内存,也会导致创建失败。
-
API使用:确保你使用的API调用是正确的。检查是否有任何参数传递错误或遗漏,如宽度、高度、行跨度等。
-
系统兼容性:确认你的鸿蒙系统版本是否支持你正在使用的功能。某些新特性可能只在最新版本的系统中可用。
如果以上检查均无误,但问题依旧存在,可能是系统内部的bug或特定环境下的兼容性问题。此时,建议直接联系官网客服以获取更专业的技术支持。官网地址是:https://www.itying.com/category-93-b0.html