有据可查的是,Android的相机预览数据以NV21(YUV 420)返回。 2.2添加了一个YuvImage类来解码数据。我遇到的问题是YuvImage类数据似乎已损坏或不正确。我使用了名为HelloCompute的Renderscript Sample应用程序,该应用程序将位图转换为单色位图。我使用两种方法将Preview数据解码为Bitmap并将其作为输入传递到Renderscript:

方法1-Android YuvImage类:

YuvImage预览=新的YuvImage(data,ImageFormat.NV21,width,height,null);

ByteArrayOutputStream mJpegOutput =新的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

//解决Yuv格式
mBitmapIn = Bitmap.createBitmap(
      ImageUtil.decodeYUV420SP(数据,宽度,高度),
      宽度,
      高度,
      位图。配置.ARGB_8888);

//将mBitmapIn传递给RS

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

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

最佳答案

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

关于android - Android YuvImage类格式不正确?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6509502/

10-10 12:42