我想知道是否有办法知道自动对焦何时完成?
我有一个应用程序,可以对视频进行一些图像处理。我需要做的第一件事就是打开闪光灯和自动对焦,我的问题是我不知道自动对焦是否完成(我需要以编程方式知道它)所以我可以开始所有的图像处理仅在自动对焦完成后。
这是我配置相机设置的方法:
@Override
public void surfaceCreated(SurfaceHolder arg0) {
try {
camera = Camera.open();
parameters = camera.getParameters();
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
parameters.setFocusMode(Parameters.FOCUS_MODE_AUTO);
camera.setParameters(parameters);
camera.setPreviewDisplay(holder);
camera.startPreview();
recorder = new MediaRecorder();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我只是想清楚,一切都很好,我只是想知道什么时候完成自动对焦。
谢谢!
答案 0 :(得分:3)
您必须先检查camera
是否支持autofocus
。像这样检查,你也可以检查手机是否支持闪光灯,请点击此链接How turn on camera flash light programmatically in Android?
PackageManager pm = getPackageManager();
if(pm.hasSystemFeature(PackageManager.FEATURE_CAMERA) && pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)){
// True means the camera has autofocus mode on. Do what ever you want to do
}
答案 1 :(得分:2)
好的,我找到了答案,我不知道为什么我之前没有考虑过。 这是新代码:
@Override
public void surfaceCreated(SurfaceHolder arg0) {
try {
camera = Camera.open();
parameters = camera.getParameters();
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
parameters.setFocusMode(Parameters.FOCUS_MODE_AUTO);
camera.setParameters(parameters);
camera.setPreviewDisplay(holder);
camera.startPreview();
camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
}
});
recorder = new MediaRecorder();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 2 :(得分:2)
(现已弃用)Camera类中的“autoFocus”方法只触发一个自动焦点事件,而回调仅涉及该单个事件。未来的自动对焦事件不会再次触发。
要知道每次需要调用setAutoFocusMoveCallback方法时自动焦点的开始和停止时间,并传入AutoFocusMoveCallback实例。自动对焦开始时回调中的“start”参数为true,自动对焦完成时为false。
camera.setAutoFocusMoveCallback(new AutoFocusMoveCallback() {
@Override
public void onAutoFocusMoving(boolean start, Camera camera) {
// Do whatever you need to respond to auto focus starting and stopping
}
});