如何在Android编程中从Camera Application捕获预览图像帧?

我正在编写一个应用程序来捕获相机预览帧,并将其转换为Android中的位图。 这是我的代码:

Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() { public void onPreviewFrame(byte[] data, Camera camera) { try { BitmapFactory.Options opts = new BitmapFactory.Options(); Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);//,opts); } catch(Exception e) { } } }; mCamera = Camera.open(); mCamera.setPreviewCallback(previewCallback); 

在我开始预览之后,callback被调用了数据,但是位图是空的。

将字节数组转换为BitMap时我做错了什么?

Solutions Collecting From Web of "如何在Android编程中从Camera Application捕获预览图像帧?"

onPreviewFrame()函数中,您应该首先检查图像格式。
这是NV21的例子。

 public void onPreviewFrame(byte[] data, Camera camera) { Parameters parameters = camera.getParameters(); imageFormat = parameters.getPreviewFormat(); if (imageFormat == ImageFormat.NV21) { Rect rect = new Rect(0, 0, PreviewSizeWidth, PreviewSizeHeight); YuvImage img = new YuvImage(data, ImageFormat.NV21, PreviewSizeWidth, PreviewSizeHeight, null); OutputStream outStream = null; File file = new File(NowPictureFileName); try { outStream = new FileOutputStream(file); img.compressToJpeg(rect, 100, outStream); outStream.flush(); outStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 

另取拍照方式,查看本文如何在android中使用相机

你有没有尝试在使用BitmapFactory之前将预览帧数据解码为RGB? 默认格式是YUV,我不确定是否与BitmapFactory兼容。 Dave Manpearl的解码方法可以在这里find:

在Android中从video图像获取帧

让我知道如果它的作品。

干杯,

保罗