HarmonyOS 鸿蒙Next 图片BGRA转BGR格式
HarmonyOS 鸿蒙Next 图片BGRA转BGR格式
最近在开发鸿蒙的项目中,遇到需要将四通道的图片转换成三通道,查找文档发现ArkTS没有支持的API,最后通过调用Native的Opencv方法实现,具体的实现逻辑给大家分享一下;
1.首先需要继承鸿蒙化的opencv c++的库
2.通过napi方法将pixelMap对象转换成cvMat对象,然后调用opencv的方法进行通道的转换
OHOS::Media::OhosPixelMapInfo pixelMapInfo;
OH_GetImageInfo(env, args[0], &pixelMapInfo);
void *frame_data = nullptr;
OHOS::Media::OH_AccessPixels(env, args[0], &frame_data);
unsigned char *src = (unsigned char *)frame_data;
cv::Mat oriMat = cv::Mat(frameH, frameW, CV_8UC4, src);
cv::Mat dstMat;
cv::cvtColor(oriMat, dstMat, cv::COLOR_BGRA2BGR);
输出的dstMat就是三通道的图片
3.再将cvMat转换成pixelMap返回给UI层
OHOS::Media::OhosPixelMapCreateOps opts = {.width = static_cast<uint32_t>(pixelMapInfo.width),
.height = static_cast<uint32_t>(pixelMapInfo.height),
.pixelFormat = 3,
.editable = 0,
.scaleMode = 0};
napi_value res;
OHOS::Media::OH_PixelMap_CreatePixelMap(
env, opts, dstMat.data, pixelMapInfo.width * pixelMapInfo.height * dstMat.channels(), &res);
OH_LOG_Print(LOG_APP, LOG_INFO, GLOBAL_RESMGR, TAG, “Exit GetArrayToMat()”);
return res;// res对象就是pixelMap
4 回复
求助, 在app napi 调用opencv库时,直接崩溃掉,
能否提供下CMakeLists.txt 的 配置
您好,适配鸿蒙的opencv c++库是怎么得到的?自己在Ubuntu用NDK编译的库引入后直接闪退
老哥,找到方法导入opencv c++库没有
在HarmonyOS鸿蒙Next系统中,将BGRA格式的图片转换为BGR格式,可以通过以下几种方式实现:
方法一:使用OpenCV库
- 继承鸿蒙化的OpenCV C++库。
- 将PixelMap对象转换为cv::Mat对象,利用OpenCV的
cvtColor
函数进行通道转换,即cv::cvtColor(oriMat, dstMat, cv::COLOR_BGRA2BGR)
。 - 将转换后的cv::Mat对象重新转换为PixelMap,并返回给UI层。
方法二:在JS层处理
- 在JS层获取到image资源对象,生成PixelMap(默认是BGRA_8888格式)。
- 调用
readPixelsToBuffer
方法读取图像像素数据到ArrayBuffer。 - 创建一个新的Uint8Array,遍历原ArrayBuffer,去除Alpha通道,只保留BGR数据。
- 将处理后的Uint8Array重新转换为ArrayBuffer,或通过其他方式传入Native层进行后续处理。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。