相机上的 Android getSupportedPreviewSizes() 仅返回 3 个尺寸

Posted

技术标签:

【中文标题】相机上的 Android getSupportedPreviewSizes() 仅返回 3 个尺寸【英文标题】:Android getSupportedPreviewSizes() on Camera returns only 3 sizes 【发布时间】:2015-09-07 01:54:10 【问题描述】:

我正在使用 android Camera API 构建相机应用,我需要设置相机的预览大小。我读过我应该在我的相机对象的 Parameter 对象上调用 getSupportedPreviewSizes() 来获取每个支持的大小的列表。问题是这个列表包含三种尺寸:640x480、352x288 和 320x240。

我正在使用 Android Studio 和内置模拟器。我试过模拟 Nexus 5、6 和 10,它们都给了我这三种尺寸。所以我怀疑这是模拟器的限制。如果是这样,有没有办法绕过它?还是因为其他原因?

【问题讨论】:

"有没有办法绕过它?" -- 绕过什么?硬件上的相机可以返回任意数量的预览尺寸,并且很可能会有硬件恰好也返回这三种预览尺寸。请详细说明您在使用这三种预览尺寸时遇到了什么问题。 @CommonsWare 问题是最大尺寸 640x480 占据了大约 1/4 或 1/3 的显示屏,而我希望它覆盖整个屏幕。 你可以拉伸它以适应显示尺寸 【参考方案1】:

预览大小很少会与您渲染预览的表面大小完全匹配(如果有的话)。 SurfaceViewTextureView 将缩放预览以填充这些视图的可用空间。

因此,您的工作是将表面调整到您想要的大小,同时保持预览的纵横比,这样缩放就不会拉伸或挤压图像。 Grafika's AspectFrameLayout 或 my AspectLockedFrameLayout 是实现这一目标的方法,子类化 SurfaceViewTextureView 并覆盖 onMeasure()

【讨论】:

我明白了,那么预览尺寸有点像不同应用比率的列表? (虽然 640x480 和 320x240 的比例相同,这很奇怪?)。我受到 SurfaceView/TextureView 需要成为可用预览尺寸之一的影响。 @lawls:“那么预览尺寸有点像不同应用比率的列表?” ——嗯,不,它们是决议。 “虽然 640x480 和 320x240 的比例相同,但很奇怪?” -- 对于您的应用程序,这些可能是多余的。对于其他应用,具有较低分辨率的预览可能是有利的(例如,更快的预览图像处理)。 很好解释。谢谢!

以上是关于相机上的 Android getSupportedPreviewSizes() 仅返回 3 个尺寸的主要内容,如果未能解决你的问题,请参考以下文章

Android 上的相机示例

三星 Galaxy S3 上的 Android 相机预览不正确

如何从 Android 上的相机获取位图?

相机上的 Android getSupportedPreviewSizes() 仅返回 3 个尺寸

如何使用相机在 Android 上的后台服务中拍照? [复制]

为啥使用相机意图捕获的图像会在 Android 上的某些设备上旋转?