我正在开发一个使用Camera
预览,拍照和缩放功能的应用程序。
我正在尝试与Android API级别7(2.1 Eclair)保持兼容,后者未实现Camera.Parameters.getMaxZoom()
,Camera.Parameters.setZoom()
等,因此我必须使用String
参数由硬件返回。例如:
final String zoomSupportedString = parameters.get("zoom-supported"); // parameters is a Camera.Parameters
final boolean zoomSupported = (zoomSupportedString != null ? Boolean.parseBoolean(zoomSupportedString) : false);
if (zoomSupported) {
// Computes the min an max zoom levels for taking a picture:
final int minTake = parameters.getInt("taking-picture-zoom-min");
final int maxTake = parameters.getInt("taking-picture-zoom-max");
// etc.
}
但并非所有设备都使用相同的参数,我在互联网上找不到任何有效的摄像机参数列表。
通过检查HTC上Camera.Parameters.flatten()
(请参阅doc)返回的值,我可以找到"zoom-supported"
,"taking-picture-zoom-min"
,"taking-picture-zoom-max"
和{{1} }。令人惊讶的是,我没有找到"max-zoom"
。
但是,例如,三星Galaxy S上不存在参数"min-zoom"
,这会导致"taking-picture-zoom-min"
返回,null
会抛出getInt()
。
知道我正在尝试与Android-7保持兼容,有没有比使用硬件返回的字符串值更好的方法来处理缩放?如果是这样,是否有可能在某处找到所有有效缩放参数的列表(甚至是按供应商列出的列表)?
答案 0 :(得分:1)
我知道这是一个古老的主题,但对于那些正在寻找相机缩放的人...我有同样的问题,现在我有2个不同的工作的Android设备,两者都有一些共同点。
Camera.Parameters.setZoom(int value)
对它们都不起作用,所以我开始测试了。一台设备有“拍照缩放-...;”但两台设备都有“zoom = ...;”在Camera.Parameters中。在具有“拍照缩放-...;”的设备上,如果我使用Camera.Parameters.set("zoom", int value)
它会崩溃,而另一方面它会工作得很好。所以,我的解决方案是,在初始化相机时,我存储一个对Camera.Parameters.get("taking-picture-zoom")!=null
保持为true的布尔值,否则为false。从那一刻起,当设置缩放时,只需检查布尔值并使用适当的缩放命令......就是这样,就像一个魅力!当然,你也可以让String保持适当的命令并在设置缩放时使用它。