【问题标题】:Finding RGB values of bitmap from camera2 API in Android从 Android 中的 camera2 API 查找位图的 RGB 值
【发布时间】:2016-04-30 13:42:04
【问题描述】:

我正在尝试从相机获取像素的 rgb 值。

我不断收到空值。 还有另一种方法可以将相机中的图像捕获到位图中吗?我研究了几个选项,但大多数都产生了 NullPointerException。

它还输出 SkImageDecoder::Factory 返回 null。

private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() {

@Override
public void onImageAvailable(ImageReader reader) {
    //            Image image = reader.acquireNextImage();
    //            mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), mFile));

    try {
        Image image = reader.acquireNextImage();
        final Image.Plane[] planes = image.getPlanes();
        final Buffer buffer = planes[0].getBuffer();
        Log.d("BUFFER", String.valueOf(buffer));
        int offset = 0;
        //    
        byte[] bytes = new byte[buffer.remaining()];
        Log.d("BUYTES", String.valueOf(bytes));
        //              
        Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); // NULL err
        Log.d("R1", "bitmap created");
        //              
        int r1, g1, b1;
        int p = 50;
        r1 = (p >> 16) & 0xff;
        g1 = (p >> 8) & 0xff;
        b1 = p & 0xff;
        Log.d("R1", String.valueOf(r1));
        Log.d("G1", String.valueOf(g1));
        Log.d("B1", String.valueOf(b1));
    } catch (Exception e) {
        e.printStackTrace();

    }
}

};

【问题讨论】:

    标签: android bitmap android-camera


    【解决方案1】:

    您的 ImageReader 使用什么格式?如果它是 JPEG,那么您的方法通常应该有效,但您实际上并没有将缓冲区复制到任何地方的字节中。

    您正在创建字节数组,然后将该空数组传递给 decodeByteArray。您需要像 ByteBuffer.get 这样的东西才能将数据实际复制到字节中。

    如果 ImageReader 是 YUV 或 RAW,那么这将不起作用;这些图像是图像数据的原始数组,并且没有标题/等让 BitmapFactory 知道如何处理它们。您必须直接检查像素值,因为内容尚未以任何方式压缩。

    【讨论】:

      猜你喜欢
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多