2017-04-27 75 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()方法的使用,但它会做的工作,如果你真的需要那种情况的位图。