HarmonyOS 鸿蒙Next 获取image.PixelMap图片中的一个区域
HarmonyOS 鸿蒙Next 获取image.PixelMap图片中的一个区域
我们的物联设备抓取了一张识别鸟的图片,传到服务器识别出鸟的位置区域,当app拿到这个图片和区域信息时需要在这个图片中把这个鸟的位置抠下来显示到其它的组件上
对 PixelMap 数据进行处理 参考
napi_value Transform(napi_env env, napi_callback_info info) { napi_value thisVar = nullptr; napi_value argValue[1] = {0}; size_t argCount = 1; if (napi_get_cb_info(env, info, &argCount, argValue, &thisVar, nullptr) != napi_ok || argCount < 1 || argValue[0] == nullptr) { return nullptr; } napi_value result = nullptr; napi_get_undefined(env, &result);
// 初始化NativePixelMap对象。
NativePixelMap *native = OH_PixelMap_InitNativePixelMap(env, argValue[0]); if (native == nullptr) { return result; }
// 获取图片信息。
struct OhosPixelMapInfos pixelMapInfo; OH_PixelMap_GetImageInfo(native, &pixelMapInfo);
// 获取PixelMap对象每行字节数。
int32_t rowBytes; OH_PixelMap_GetBytesNumberPerRow(native, &rowBytes);
// 获取PixelMap对象是否可编辑的状态。
int32_t editable = 0; OH_PixelMap_GetIsEditable(native, &editable);
// 获取PixelMap对象是否支持Alpha通道。
int32_t supportAlpha = 0; OH_PixelMap_IsSupportAlpha(native, &supportAlpha);
// 设置PixelMap对象的Alpha通道。
int32_t alphaAble = 0; OH_PixelMap_SetAlphaAble(native, alphaAble);
// 获取PixelMap对象像素密度。
int32_t densityG; OH_PixelMap_GetDensity(native, &densityG);
// 设置PixelMap对象像素密度。
int32_t densityS = 100; OH_PixelMap_SetDensity(native, densityS);
// 设置PixelMap对象的透明度。
float opacity = 0.5; OH_PixelMap_SetOpacity(native, opacity);
// 设置缩放比例。
// scaleX: 宽为原来的0.5。
// scaleY: 高为原来的0.5。
float scaleX = 0.5; float scaleY = 0.5; OH_PixelMap_Scale(native, scaleX, scaleY);
// 设置偏移。
// translateX: 向下偏移50。
// translateY: 向右偏移50。
float translateX = 50; float translateY = 50; OH_PixelMap_Translate(native, translateX, translateY);
// 设置顺时针旋转90度。
float angle = 90; OH_PixelMap_Rotate(native, angle);
// 设置翻转
// flipX: 水平翻转,0为不翻转,1为翻转。
// flipY: 垂直翻转,0为不翻转,1为翻转。
int32_t flipX = 0; int32_t flipY = 1; OH_PixelMap_Flip(native, flipX, flipY);
// 设置裁剪区域。
// cropX: 裁剪起始点横坐标。
// cropY: 裁剪起始点纵坐标。
// cropH: 裁剪高度10,方向为从上往下(裁剪后的图片高度为10)。
// cropW: 裁剪宽度10,方向为从左到右(裁剪后的图片宽度为10)。
int32_t cropX = 1; int32_t cropY = 1; int32_t cropW = 10; int32_t cropH = 10; OH_PixelMap_Crop(native, cropX, cropY, cropW, cropH);
// 获取PixelMap对象数据的内存地址,并锁定该内存。
void *pixelAddr = nullptr; OH_PixelMap_AccessPixels(native, &pixelAddr);
// 释放PixelMap对象数据的内存锁。
OH_PixelMap_UnAccessPixels(native); return result; }
参考指南: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/image-pixelmap-operation-native-V5
更多关于HarmonyOS 鸿蒙Next 获取image.PixelMap图片中的一个区域的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next系统中,你可以通过PixelMap
类的方法来获取图片中的一个特定区域。以下是一个直接获取PixelMap
中指定区域的方式:
首先,你需要有一个PixelMap
对象,假设已经通过某种方式(如解码图片文件)获得了该对象。然后,使用createPixelMapFromRegion
方法从原PixelMap
中裁剪出你需要的区域。
示例代码如下:
// 假设已经有一个PixelMap对象:originalPixelMap
PixelMap regionPixelMap = null;
Rect rect = new Rect(startX, startY, endX, endY); // 定义你需要的区域
try {
regionPixelMap = originalPixelMap.createPixelMapFromRegion(rect);
} catch (IllegalArgumentException e) {
// 处理异常情况,如区域超出原PixelMap范围
}
// regionPixelMap即为从originalPixelMap中裁剪出的指定区域
在上面的代码中,startX
和startY
是你想裁剪区域的左上角坐标,endX
和endY
是右下角坐标。注意,坐标系的原点(0,0)位于图片的左上角。
如果createPixelMapFromRegion
方法因为某些原因(如区域超出原图范围)失败,会抛出IllegalArgumentException
异常,因此在实际应用中需要处理这种异常。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html