如何从Camera2和ImageReader获取正确的尺寸?

时间:2018-06-21 18:52:00

标签: android android-camera2

在我的Android应用程序中,我使用Camera2 API允许用户拍摄快照。该代码主要来自标准的Camera2示例应用程序。

当图像可用时,可通过调用acquireNextImage方法获得图像:

 public void onImageAvailable(ImageReader reader) {
     mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), mFile));
 }

就我而言,当我获得Image对象的宽度和高度时,它报告为4160x3120。但是,实际上是3120x4160。当我将缓冲区转储为jpg文件时,可以看到实际大小:

 ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
 byte[] bytes = new byte[buffer.remaining()];
 buffer.get(bytes);
 // Dump "bytes" to file

出于我的目的,我需要正确的宽度和高度。想知道宽度和高度是否因为传感器方向为90度而被交换。

如果是这样,只要检测到传感器方向为90或270,就可以简单地交换尺寸。我已经有了该值:

  mSensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);

我觉得这是一个普遍的问题,并非特定于我的代码。问候。

编辑:

结果显示报告的图像尺寸正确。 Jpeg图像元数据存储一个称为“方向”的字段。大多数图像查看者都知道如何解释该值。

0 个答案:

没有答案