【问题标题】:camera2 output to Bitmapcamera2 输出到位图
【发布时间】:2017-01-20 22:49:44
【问题描述】:

我正在尝试将 Google Mobile Vision API 与 camera2 模块一起使用,但遇到了很多麻烦。

我使用 Google 的 android-Camera2Video 示例代码作为基础。我已对其进行了修改以包含以下回调:

Camera2VideoFragment.java

OnCameraImageAvailable mCameraImageCallback;

public interface OnCameraImageAvailable {
    void onCameraImageAvailable(Image image);
}


ImageReader.OnImageAvailableListener mImageAvailable = new ImageReader.OnImageAvailableListener() {
    @Override
    public void onImageAvailable(ImageReader reader) {

        Image image = reader.acquireLatestImage();
        if (image == null)
            return;

        mCameraImageCallback.onCameraImageAvailable(image);

        image.close();
    }
};

这样,包括Camera2VideoFragment.java 在内的任何片段都可以访问其图像。

现在,条形码 API 只接受 Bitmap 图像,但我无法将 YUV_420_888 转换为位图。相反,我将imageReader 的文件格式更改为JPEG 并运行以下转换代码:

    Image.Plane[] planes = image.getPlanes();
    ByteBuffer buffer = planes[0].getBuffer();
    buffer.rewind();
    byte[] data = new byte[buffer.capacity()];
    buffer.get(data);
    Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

这行得通,但是将 JPEG 数据馈送到 imageReader 的帧率下降很明显。我想知道是否有人以前解决过这个问题。

【问题讨论】:

  • 您的代码帮助我解决了原本无法解决的问题。谢谢你:)

标签: java android bitmap google-vision


【解决方案1】:

一个迟到的答案,但希望仍然有用。

Ezequiel Adrian 在他的Example 中解释了将 YUV_420_888 转换为一种受支持的格式(在他的情况下为 NV21),您可以执行类似的操作来获取位图输出:

private byte[] convertYUV420888ToNV21(Image imgYUV420) {
// Converting YUV_420_888 data to YUV_420_SP (NV21).
byte[] data;
ByteBuffer buffer0 = imgYUV420.getPlanes()[0].getBuffer();
ByteBuffer buffer2 = imgYUV420.getPlanes()[2].getBuffer();
int buffer0_size = buffer0.remaining();
int buffer2_size = buffer2.remaining();
data = new byte[buffer0_size + buffer2_size];
buffer0.get(data, 0, buffer0_size);
buffer2.get(data, buffer0_size, buffer2_size);
return data;}

然后你可以将结果转换成Bitmap:

Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

【讨论】:

  • BitmapFactory 无法使用该方法生成位图。
  • 问题解决了吗?我面临同样的问题,在 BitmapFactory 返回 null
猜你喜欢
  • 1970-01-01
  • 2017-02-23
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
相关资源
最近更新 更多