这是一个很好的文件,安卓的相机预览数据被返回回NV21 (YUV 420)。添加了一个用于解码数据的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-张贴解码器方法:作为已发布的大卫·皮尔曼
// 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的位图与预览帧是相同的。
发布于 2011-10-10 01:12:45
没有理由只使用Jpeg编码/解码来将YUV图像转换为灰度位图(我相信您想要灰度,而不是单色b/w位图)。您可以找到许多生成所需结果的代码示例。您可以使用以下一个:将预览帧转换为位图。
https://stackoverflow.com/questions/6509502
复制相似问题