android - 如何从 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 图像元数据存储一个称为“方向”的字段。大多数图像查看器都知道如何解释这个值。
解决方案
推荐阅读
- twig - 如何检查提供的 URL 是 youtube 还是 vimeo?
- python-3.x - 如何在python中使用mysql查询绘制实时线图
- hyperledger-fabric - 使 Hyperledger 结构中的对等点失败
- sql - SQL:用于比较两个模式并使用新模式的新列更新旧模式的 SQL 查询
- wordpress - 手动升级 WordPress 核心
- javascript - Vuejs突出显示项目列表中单击项目的颜色?
- ami.js - 提供平滑的阴影材料
- php - Yii 1.2 框架命令行迁移文件不运行?
- xml - XML 的符号列表定义
- python - Pandas:读/写具有不同行分隔符的 CSV 文件