在我的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图像元数据存储一个称为“方向”的字段。大多数图像查看者都知道如何解释该值。