如何检查相机自动对焦何时完成?

时间:2014-01-14 06:58:16

标签: java android opencv android-camera

我想知道是否有办法知道自动对焦何时完成?

我有一个应用程序,可以对视频进行一些图像处理。我需要做的第一件事就是打开闪光灯和自动对焦,我的问题是我不知道自动对焦是否完成(我需要以编程方式知道它)所以我可以开始所有的图像处理仅在自动对焦完成后。

这是我配置相机设置的方法:

@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();
    }

}

我只是想清楚,一切都很好,我只是想知道什么时候完成自动对焦。

谢谢!

3 个答案:

答案 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
    }
});