【问题标题】:Android YuvImage class format incorrect?Android YuvImage 类格式不对?
【发布时间】:2011-06-28 16:04:45
【问题描述】:

有据可查的是,Android 的相机预览数据在 NV21 (YUV 420) 中返回。 2.2 增加了一个用于解码数据的 YuvImage 类。我遇到的问题是 YuvImage 类数据出现损坏或不正确。我使用了名为 HelloCompute 的 Renderscript 示例应用程序,它将位图转换为单色位图。我使用了两种方法将预览数据解码为位图并将其作为输入传递给 Renderscript:

方法 1 - Android YuvImage 类:

YuvImage preview = new YuvImage(data, ImageFormat.NV21, width, height, null);

ByteArrayOutputStream mJpegOutput = new ByteArrayOutputStream(data.length); 

preview.compressToJpeg(new Rect(0, 0, width, height), 100, mJpegOutput);
mBitmapIn = BitmapFactory.decodeByteArray( mJpegOutput.toByteArray(), 0, mJpegOutput.size());

//将mBitmapIn传递给RS

方法 2 - 发布解码器方法: 如张贴over here by David Pearlman

// work around for Yuv format </p>
mBitmapIn = Bitmap.createBitmap(
      ImageUtil.decodeYUV420SP(data, width, height),
      width, 
      height, 
      Bitmap.Config.ARGB_8888);

// pass mBitmapIn to RS

当图像被 Renderscript 处理并显示时,方法 1 非常颗粒状且不是单色的,而 方法 2 产生预期的输出,即预览帧的单色图像。我做错了什么还是 YuvImage 类不可用?我正在运行 3.1 的 Xoom 上对此进行测试。

此外,在传递到 RS 之前,我在屏幕上显示了这两种方法生成的位图。方法 1 的位图在光照上有明显差异(我怀疑这是由于 JPeg 压缩造成的),而方法 2 的位图与预览帧相同。

【问题讨论】:

    标签: android image camera preview yuv


    【解决方案1】:

    使用 Jpeg 编码/解码只是为了将 YUV 图像转换为灰度位图是没有道理的(我相信你想要灰度,毕竟不是单色 b/w 位图)。您可以找到许多产生所需结果的代码示例。你可以使用这个:Converting preview frame to bitmap

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多