OhosPixelMapCreateOps中的pixelFormat的枚举设置成3和4有一样的效果。

OhosPixelMapCreateOps中的pixelFormat的枚举设置成3和4有一样的效果。

HarmonyOS
2024-05-08 23:30:22
浏览
收藏 0
回答 3
待解决
回答 3
按赞同
/
按时间
morning_dxm

排列不影响显示效果,解码的时候设置为3,4,显示效果是一样的。目前使用buffer创建pixelmap传入只能传bgra,如果传rgba,内部处理时会当作bgra来处理最后导致图片偏色。

分享
微博
QQ
微信
回复
2024-05-09 14:38:56
wx643cd9e216bee
void GPURenderThread::readPixelFromFBO() { 
    std::lock_guard<std::mutex> lk(mutex);
    void *pixels = new GLubyte[imageWidth * imageHeight * 4];
    glReadPixels(0, 0, imageWidth, imageHeight, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
    //使用NativeImage把相机预览流更新到纹理后,从FBO读出来的YUV420SP格式的相机预览帧已经被转成RGBA格式
    //但是buffer如果设置解码成RGBA的PixelMap会偏色
    OpenGlUtils::ConvertRGBAtoBGRA( pixels, imageWidth * imageHeight);
    filterOutputCb->pixelMap.ops.width = imageWidth;
    filterOutputCb->pixelMap.ops.height = imageHeight;
    filterOutputCb->pixelMap.ops.alphaType = 0;
    filterOutputCb->pixelMap.ops.pixelFormat = 3;//pixelFormat设3或4都一样,貌似固定解码成BGRA
    if (filterOutputCb->pixelMap.buffer) {
        delete[] filterOutputCb->pixelMap.buffer;
        filterOutputCb->pixelMap.buffer = nullptr;
    }
    filterOutputCb->pixelMap.buffer = pixels;
    filterOutputCb->OnCallbackAsync();
}

我也碰到了类似的问题,pixelFormat设置为RGBA的时候偏色

分享
微博
QQ
微信
回复
2024-05-13 09:27:06
wx643cd9e216bee

原因找到了,ohos将像素buffer解码成PixelMap的接口固定将buffer当做BGRA格式处理,pixelFormat = 3 标识解码后的PixelMap颜色格式;

OH_PixelMap_CreatePixelMap(env, pixelMap.ops, (uint8_t *)buff, bufferSize, &result);
分享
微博
QQ
微信
回复
2024-05-28 16:50:42
相关问题
XComponent 怎么设置成透明
1778浏览 • 1回复 待解决
如何将AbilityUI界面设置成透明
1971浏览 • 1回复 待解决
鸿蒙安卓有什么不一样
6286浏览 • 3回复 待解决