由于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 类。

相关文章:

  • 2022-12-23
  • 2021-12-10
  • 2021-06-29
  • 2021-07-30
  • 2021-10-12
  • 2022-02-07
  • 2021-12-23
  • 2021-11-27
猜你喜欢
  • 2021-09-18
  • 2021-05-29
  • 2021-07-29
  • 2022-12-23
  • 2021-07-02
  • 2022-01-16
  • 2022-12-23
相关资源
相似解决方案