Native Image模块API-OH\_PixelMap\_InitNativePixelMap?

https://developer.huawei.com/consumer/cn/doc/harmonyos-references/image-0000001774121838调用Native Image模块的OH\_PixelMap\_InitNativePixelMap函数,想初始化一个NativePixelMap对象。

发现一个问题:传入一个RGBA的图像数据,会得到一个BGRA的图像,传入BGRA会得到RGBA的图像。实际上传入RGBA的数据,想得到的是RGBA的图像。

没看到有相应的参数控制,有没有解决。

问题场景描述:

Native C++开发,想拷贝一份NativePixelMap对象。

阅读 540
2 个回答

可以通过设置OhosPixelMapCreateOps 中的info参数即可:

napi_value CreatePixelMaptest(napi_env env, napi_callback_info info) {
napi_value udfVar = nullptr;
napi_value pixelmap = nullptr;

struct OhosPixelMapCreateOps createOps;
createOps.width = 4;
createOps.height = 6;
createOps.pixelFormat = 3; // 设置为3,图片格式为RGBA,设置为4,图片格式为BGRA
createOps.alphaType = 0;
size_t bufferSize = createOps.width * createOps.height * 4;
void *buff = malloc(bufferSize);

int32_t res = OH_PixelMap_CreatePixelMap(env, createOps, (uint8_t *)buff, bufferSize, &pixelmap);
if (res != IMAGE_RESULT_SUCCESS || pixelmap == nullptr) {
return udfVar;
}
return pixelmap;
}

可以通过调整demo中createOps.pixelFormat的值修改图像数据的格式,若设置为3,图片格式为RGBA;设置为4,图片格式为BGRA。

关于OhosPixelMapCreateOps更详细的内容可以参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/\_ohos\_pixel\_map\_create\_ops-0000001820881505

新手上路,请多包涵
napi_value CreatePixelMapTest(napi_env env, napi_callback_info info) {
    napi_value udfVar = nullptr;
    napi_value pixelMap = nullptr;

    OhosPixelMapCreateOps createOps;
    createOps.width = 4;
    createOps.height = 6;
    createOps.pixelFormat = 3;
    createOps.alphaType = 0;
    size_t bufferSize = createOps.width * createOps.height * 4;
    void *buff = malloc(bufferSize);
    memset(buff, 0, bufferSize);
    
    uint32_t *pixelBuffer = (uint32_t *)buff;
    for (int i = 0; i < createOps.width * createOps.height; ++i) {
        if(flag) {
            pixelBuffer[i] = 0xFFFF0000;
        } else {
            pixelBuffer[i] = 0xFF00FF00;
        }
    }
    flag = !flag;
    int32_t res = OH_PixelMap_CreatePixelMap(env, createOps, (uint8_t *)buff, bufferSize, &pixelMap);
    if (res != IMAGE_RESULT_SUCCESS || pixelMap == nullptr) {
        return udfVar;
    }
    return pixelMap;
}

我也碰到了类似的问题,当试着去创建了PixelMap,往buffer里面填充像素数据,不管我将createOps.pixelFormat改成3还是4,显示的颜色始终是绿色和红色,颜色格式貌似是固定的BGRA

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进