0

我有一个正在开发的应用程序,它使用设备上的前置摄像头。我正在尝试通过获取支持的预览尺寸列表并循环浏览它们来寻找一个非常接近的预览尺寸。我为此编写的方法与操作系统自己的相机应用程序中的方法基本相同。该方法工作正常,正是我想要的,这不是我在这里的原因。

我的相机预览在某些设备上看起来明显偏斜,我遇到了问题;压缩或拉伸图像的预览。我不知道为什么会这样,所以我逐步浏览了它,查看了我的前置摄像头可用的所有支持的预览尺寸,发现只有 2 个,而且它们都不是可用的正确方面. 我的 SurfaceHolder.Callback 类中的“surfaceChanged”方法报告前置摄像头的宽度和高度为 762x480,但两个支持的预览尺寸(通过 cam.getParameters().getSupportedPreviewSizes() 获得)都在对面:480x800、320x640。

有了这些作为唯一的选择,似乎不可能预览没有倾斜的前置摄像头。我知道在 2.3 或更低版本中,可以将任意值用于宽度和高度,而不考虑支持的尺寸,但我正在尝试让我的应用程序也适用于较新版本的操作系统。如何使预览看起来正确?

4

1 回答 1

1

我最初的问题在技术上仍未解决(我仍然认为这是不可能的),但是我确实找到了实现非倾斜预览的技巧。

鉴于与我的设备屏幕相比,支持的预览尺寸都处于不正确的方向,看起来确实不可能有一个正常的预览来填满整个屏幕。在查看了不同设备上的几个原生相机应用程序(所有这些应用程序都显示正面预览而完全没有倾斜)后,我注意到很少有设备(实际上只有一个,而且一个有非标准屏幕大小)具有覆盖整个屏幕的预览,就像我在我的应用程序中尝试做的那样。

我重新设计了我的应用程序以获得与设备屏幕最接近的宽度和高度的大小,但没有在任何一个维度或纵横比上进行调整,然后手动设置 SurfaceView 的高度和宽度以匹配所选大小。确实,现在某些设备上的预览周围有少量黑色空间,但它看起来肯定比歪斜的要好得多。无论如何,我有一个面板,带有用于拍摄照片和操纵闪光灯设置等的按钮,所以它确实没有人们想象的那么引人注目。

于 2012-12-18T20:33:43.153 回答