0

我想用来CameraSource检测一些可视代码(不是任何类型的条形码)。我实现Detector了它的detect(Frame frame)方法。但是,当我调用frame.getBitmap()detect方法时,它总是返回null. 我知道Frame有另一种方法,getGrayscaleImageData()但是检测代码需要颜色信息。似乎CameraSource只将灰度图像数据传递给其底层检测器。

那么,有没有办法通过 检测此代码CameraSource?还是我应该放弃CameraSource并另谋出路?

4

2 回答 2

1

在当前版本中,CameraSource 实际上确实会从 getGrayscaleImageData 返回图像的完整颜色信息。返回的前导字节是图像的灰度层(Y 通道),但超出的字节具有颜色信息。格式详细信息取决于您在设置 CameraSource 时指定的图像格式(默认为 NV21 格式)。

于 2016-03-25T13:56:09.813 回答
0

找到它:D 此代码返回彩色位图的速度如此之快,但如果它是前置摄像头,您可能必须根据设备翻转/旋转。

    public SparseArray detect(Frame frame) {
    byte[] bytes = frame.getGrayscaleImageData().array();
    YuvImage yuvImage = new YuvImage(frame.getGrayscaleImageData().array(), ImageFormat.NV21, frame.getMetadata().getWidth(), frame.getMetadata().getHeight(), null);
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    yuvImage.compressToJpeg(new Rect(0, 0, frame.getMetadata().getWidth(), frame.getMetadata().getHeight()), 100, byteArrayOutputStream);
    byte[] jpegArray = byteArrayOutputStream.toByteArray();
    Bitmap bitmap = BitmapFactory.decodeByteArray(jpegArray, 0, jpegArray.length);//this bitmap is colored.
    return null; 
}
于 2018-01-28T23:57:41.890 回答