【问题标题】:Zxing camera and preview frame format (YUV, RGB...)Zxing 相机和预览帧格式(YUV、RGB...)
【发布时间】:2013-08-10 05:26:13
【问题描述】:

我正在使用 Zxing API 来解码一些二维码图像。 我需要将 YUV 格式转换为 -> RGB 格式以用于其他应用程序。

我知道相机缓冲区在NV21格式(YUV)下返回一个byte[],但它是哪个?

  • 我可以获得 YUV420 格式吗?还是 YUV422 格式?
  • 如果是这样,如何将此格式转换为 RGB888 格式?我需要 在此之前将 YUV 转换为 YUV888 吗?

感谢您的宝贵时间,

编辑: 我不明白的一件事是 YUV420 预览帧中 byte[] 的长度。对于 1280*720 分辨率,我得到 1,382,400.00 字节。是怎么计算的?

【问题讨论】:

    标签: android image-processing android-camera zxing yuv


    【解决方案1】:

    NV21 基本上就是 YUV420。可以直接转换: http://en.wikipedia.org/wiki/YUV#Y.27UV420p_.28NV21.29_to_ARGB8888_conversion

    【讨论】:

    • 哦,所以如果我只想要RGB格式,我必须在维基百科转换后删除alpha像素?
    • 是的,完全忽略这一点。那里的代码只是将第 4 个 0xFF 字节放在顶部,这已经隐含在 RGB888 中。
    • 好的,会试试的。但是你确定它是 YUV420 吗?我明白为什么我得到 1 382 400 字节以获得 1280 * 720 的分辨率。你知道它是怎么计算的吗?
    • 这是 921600 像素,因此 Y.U 和 V 的 921600 字节都是 2x2 二次采样的,所以每个字节只有 1/4。所以 U 和 V 都是 230400 字节。这三个加起来是 1382400。
    • 非常感谢您的澄清
    【解决方案2】:

    虽然接受的答案是正确的,但值得指出的是,ZXing 库包含 PlanarYUVLuminanceSource,它封装了这种转换,如果解码器逐行访问数据,则可以限制峰值内存使用量。

    【讨论】:

      猜你喜欢
      • 2013-05-04
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 2012-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多