Android 关于获取摄像头帧数据解码
由于Android下摄像头预览数据只能 ImageFormat.NV21 格式的,所以解码时要经过一翻周折.
Camera mCamera = Camera.open(); Camera.Parameters p = mCamera.getParameters(); p.setPreviewFormat(ImageFormat.NV21); /*这是唯一值,也可以不设置。有些同学可能设置成 PixelFormat 下面的一个值,其实是不对的,具体的可以看官方文档*/ |
mCamera.setParameters(p); |
mCamera.startPreview(); |
下面是解码核心部分:
@Override public void onPreviewFrame( byte [] data, Camera camera) { Size size = camera.getParameters().getPreviewSize(); try { YuvImage image = new YuvImage(data, ImageFormat.NV21, size.width, size.height, null ); if (image!= null ){ ByteArrayOutputStream stream = new ByteArrayOutputStream(); image.compressToJpeg( new Rect( 0 , 0 , size.width, size.height), 80 , stream); Bitmap bmp = BitmapFactory.decodeByteArray(stream.toByteArray(), 0 , stream.size()); stream.close(); } } catch (Exception ex){ Log.e( "Sys" , "Error:" +ex.getMessage()); } } |
代码很简单。就是把YUV数据转成 Bitmap 就行了,系统提供 YuvImage 类。