Android 如何将NV21 YUV转换为RGB并返回

Android 如何将NV21 YUV转换为RGB并返回,android,c++,image,colors,Android,C++,Image,Colors,我正在开发一个应用程序,它应该在Android上使用NV21 YUV格式。为了检查我的算法,我需要将YUV格式保存到RGB,然后保存到位图文件来查看它。因此,我为此编写的算法非常简单。 程序加载bitmab RGB图像,将其转换为NV21,然后将其转换为RGB并保存到磁盘。 我实现了中给出的转换。我使用的是BT.601的全速,用于RGB到YUV的转换,使用的是Y'UV420sp(NV21)到RGB的转换(Android),用于RGB到YUV的转换。然而,图像失去了它的颜色。我检查了我的代码很多次

我正在开发一个应用程序,它应该在Android上使用NV21 YUV格式。为了检查我的算法,我需要将YUV格式保存到RGB,然后保存到位图文件来查看它。因此,我为此编写的算法非常简单。 程序加载bitmab RGB图像,将其转换为NV21,然后将其转换为RGB并保存到磁盘。 我实现了中给出的转换。我使用的是BT.601的全速,用于RGB到YUV的转换,使用的是Y'UV420sp(NV21)到RGB的转换(Android),用于RGB到YUV的转换。然而,图像失去了它的颜色。我检查了我的代码很多次(这是非常简单的、未优化的和直接的),我没有发现任何错误。我使用的转换是否有问题

输入图像:

输出图像:


对代码一无所知,几乎不可能说出确切的信息

但是,图像损坏的方式表明:

  • Luma(Y)平面处理正确
  • 色度(V/U交错,4:2:0子采样)平面处理不正确,而且,所有色度行都相同,这通常发生在处理后续行时忘记进一步移动偏移时。在YUV颜色模型中,绿色色调的普遍性通常表示您正在读取色度平面的0(可能实际上是一个垃圾区域)
  • 我建议您在从RGB或转换到RGB时仔细检查U/V指针的正确处理。Rememer是混合平面和4:2:0子采样的,而通用RGB(特别是在位图导入/导出时)可以是平面或交错的,但不能是子采样的


    此外,如果提供一些代码来说明如何处理问题,通常更容易得到全面的建议。

    对代码一无所知,几乎不可能说出确切的信息

    但是,图像损坏的方式表明:

  • Luma(Y)平面处理正确
  • 色度(V/U交错,4:2:0子采样)平面处理不正确,而且,所有色度行都相同,这通常发生在处理后续行时忘记进一步移动偏移时。在YUV颜色模型中,绿色色调的普遍性通常表示您正在读取色度平面的0(可能实际上是一个垃圾区域)
  • 我建议您在从RGB或转换到RGB时仔细检查U/V指针的正确处理。Rememer是混合平面和4:2:0子采样的,而通用RGB(特别是在位图导入/导出时)可以是平面或交错的,但不能是子采样的

    此外,如果提供一些代码说明如何处理事情,通常更容易获得全面的建议