有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何检查摄像头自动对焦何时完成?

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

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

以下是我配置摄像头设置的方式:

@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) 个答案

  1. # 1 楼答案

    您必须首先检查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 
    }
    
  2. # 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();
        }
    
    }
    
  3. # 3 楼答案

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