我的应用程序中有一个摄像头,我希望它能够以与手机摄像头相同的方式连续自动对焦。我找到了模式FOCUS_MODE_CONTINUOUS_VIDEO
和FOCUS_MODE_CONTINUOUS_PICTURE
,但我测试的一些HTC Gingerbread手机不支持它们。
我正在做的是确定是否可以使用这些模式:
Camera.Parameters parameters = mCamera.getParameters();
List<String> supportedFocusModes = parameters.getSupportedFocusModes();
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH &&
supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
}
else if (supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
}
else if (supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) {
// auto focus on request only
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
}
在几款不同的Gingerbread HTC手机上运行我不能恢复连续模式,但我得到了#34; auto&#34;。这让我可以根据需要自动对焦(当我拨打mCamera.autoFocus(null)
时,但如果用户移动相机,相机将不会重新聚焦。
我无法将对焦模式设置为相机不支持的任何内容,如果我这样做则会显示空白。
我尝试过的一个解决方案是在计时器上调用mCamera.autoFocus(null)
。这会导致相机连续重新对焦,即使它已经对焦。
有没有办法在这些手机上实现持续的自动对焦体验?当我在这些手机上查看HTC相机应用程序时,它确实具有连续的自动对焦功能 - 当您在相机周围移动时,重新聚焦并且在图像聚焦后不会保持重新对焦。
答案 0 :(得分:3)
我们要求支持各种各样的手机。我的解决方案最终是以不同的方式处理每个案例。
对于没有连续自动对焦支持的手机的情况,我实施了一个实用程序,使用SensorManager
收听加速度计,并在用户移动相机时触发mCamera.autoFocus(...)
。
还有一些较旧的平板电脑只支持固定焦点(谁会使用这样的东西!),在这种情况下需要立即拍摄照片 - 而不是焦点回调。
对于大多数现代手机,上面的代码段可以使用FOCUS_MODE_CONTINUOUS_PICTURE
。
答案 1 :(得分:0)
我的三星S4上有类似的pb,我解决了它:
camera.setParameters(parameters);
camera.autoFocus(null);
Google doc here中建议这样做。
要使相机参数生效,您的应用程序必须拨打setParameters(Camera.Parameters)
。