2017-04-27 38 views

回答

0

根據移動視覺API文檔,Frame對象有方法getBitmap()但它明確指出,

getBitmap()
返回其在創建該幀中指定的位圖,或者如果不使用位圖空創建這個框架。

如果你真的想獲得位圖對象,你將不得不自己創建它。一個選項是getGrayscaleImageData()方法Frame對象。
如果返回ByteBuffer中有一些字節,則可以將其轉換爲Bitmap

首先,您必須使用getGrayscaleImageData()結果中的字節數組創建YuvImage。這是一個必需的步驟,因爲字節數組的圖像顏色空間爲YUV/YCbCr,編碼格式爲NV21。所以第一行是這樣的:

YuvImage yuvImage = new YuvImage(frame.getGrayscaleImageData().array(), ImageFormat.NV21, width, height, null); 

widthheight可以從幀由getMedatada().getHeight()/getMedatada().getWidth()方法提取。

然後,您可以使用ByteArrayOutputStream快速壓縮您的YuvImage對象。

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
yuvImage.compressToJpeg(new Rect(0, 0, width, height), 100, byteArrayOutputStream); 

從那裏,你可以將它再次字節數組BitmapFactory最終使用它。

byte[] jpegArray = byteArrayOutputStream.toByteArray(); 
Bitmap bitmap = BitmapFactory.decodeByteArray(jpegArray, 0, jpegArray.length); 

我知道這是很多的代碼比較簡單getBitmap()方法的使用,但它會做的工作,如果你真的需要那種情況的位圖。