您可能已经解决了这个问题,但如果将来有人偶然发现这个问题,我是这样解决的:
正如 @pm0733464 指出的,默认图像格式来自android.hardware.Camera
是 NV21,这是使用的那个相机源 https://github.com/googlesamples/android-vision/blob/master/visionSamples/barcode-reader/app/src/main/java/com/google/android/gms/samples/vision/barcodereader/ui/camera/CameraSource.java.
This https://stackoverflow.com/questions/3338235/bitmapfactory-decodebytearray-is-returning-nullstackoverflow 的答案提供了答案:
YuvImage yuvimage=new YuvImage(byteBuffer, ImageFormat.NV21, w, h, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
yuvimage.compressToJpeg(new Rect(0, 0, w, h), 100, baos); // Where 100 is the quality of the generated jpeg
byte[] jpegArray = baos.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(jpegArray, 0, jpegArray.length);
虽然frame.getGrayscaleImageData()
建议bitmap
将是原始图像的灰度版本,根据我的经验,情况并非如此。事实上,该位图与提供给SurfaceHolder
原生地。