使用Libyuv将YUV_420 _888转换为ARGB

时间:2016-03-20 21:17:53

标签: android android-camera yuv argb libyuv

我正在处理在YUV_420 _888中编码的Android camera2预览帧,通过调用Libyuv库中的方法I420ToARGB,但我得到的图像颜色错误。

 libyuv::I420ToARGB(
    ysrc, //const uint8* src_y,
    ystride, //int src_stride_y,
    usrc, //const uint8* src_u,
    ustride, ///int src_stride_u,
    vsrc, //const uint8* src_v,
    vstride, //int src_stride_v,
    argb, //uint8* dst_argb,
    w*4, //int dst_stride_argb,
    w, //int width,
    h //int height
);

1 个答案:

答案 0 :(得分:1)

如果红色物体显示为蓝色,反之亦然,则U和V颜色平面向后。根据Android开发人员文档,这些平面是:

http://developer.android.com/reference/android/graphics/ImageFormat.html#YUV_420_888

  

Image#getPlanes()返回的数组中的平面顺序是   保证平面#0始终为Y,平面#1始终为U(Cb),   平面#2总是V(Cr)。

此外,似乎此libyuv方法不支持像素步幅,对于YUY_420_888图像,像素步幅可能大于1。在这种情况下,您需要预先处理要连续的平面,或者当像素跨度大于1时,使用从libyuv接受半平面420的方法(如果存在)。