首页 > 解决方案 > 如何从 Camera2 和 ImageReader 获得正确的尺寸?

问题描述

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

标签: androidandroid-camera2

解决方案


推荐阅读