我试图获取相机支持的所有缩放值,并为用户提供一个在它们之间移动的 slider 。问题是我只能从 Camera.Parameters.getZoomRatios() 获取一个值。我正在使用 Android 2.3.4 (gingerbread) 的 HTC Sensation 设备进行测试
final Parameters parameters = camera.getParameters();
if(parameters.isZoomSupported()) {
// get all the zoom levels
final List<Integer> zooms = parameters.getZoomRatios();
zooms 始终是 [100]
这也是我从 parameters.getMaxZoom()
返回的内容。
我已在 Android list 中请求了所有相关权限,并按照相机 API javadocs 中的说明进行操作。
我在该设备上的 native 相机应用程序支持许多缩放值。关于这里可能出现的问题有什么想法吗?
最佳答案
缩放比例可能不是您想要的。您的相机可以从 0 缩放到 getMaxZoom
返回的任何值。尝试调用setZoom
0 到 100 之间的值(您说这是从 getMaxZoom 返回的),然后看看是否有效。
您的 slider 可以从 0 变为从 getMaxZoom
返回的任何值。与 Android 上的许多相机参数一样,每个不同供应商的变焦比可能并不总是那么值得信赖。
根据文档,setZoom
的有效范围是 0 到 getMaxZoom()。我在所有设备上都得到了完美的缩放结果,但刚刚在运行 4.0.3 的 HTC Sensation 上进行了测试。对于 getMaxZoom() ,我得到 5 作为结果 int,并且将缩放设置为 0-5 可以缩放相机。您的问题可能源于设备在使用 Gingerbread 时可能遇到的一些问题,因为当我打印 Zoomratios 数组时,我得到以下信息:
[100, 114, 131, 151, 174, 200]
缩放比率数组旨在了解每个缩放级别从 1.0 倍缩放基线开始缩放图像的系数(乘以 100)。在上面的示例中,将缩放设置为 2 会将缩放设置为第三个缩放比桶:1.31 倍的放大倍数。这也说明了为什么第一个值是 100——因为第一个缩放值 0 相当于 1.0 倍缩放。
如果您从最大缩放查询返回 100,那么缩放在您的设备上似乎完全不稳定。如果是这种情况,我建议在您的 setParameters
调用周围抛出一个 try-catch 来防止制造商错误。
关于Android Camera.Parameters.getZoomRatios() 只返回 1 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15455346/