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 類。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM