How to autofocus Android camera automatically?

后端 未结 6 1643
执念已碎
执念已碎 2020-12-02 14:12

I want to autofocus Android camera as soon as camera holds still. Im looking for tutorials or samples how to do it or at least small sample that shows what classes I can use

相关标签:
6条回答
  • 2020-12-02 14:42

    Looks like you should continuous autofocus as is discussed here.

    There is a question here that you can reference.

    0 讨论(0)
  • 2020-12-02 14:53

    For me this worked a treat:

    //set camera to continually auto-focus
    Camera.Parameters params = c.getParameters();
    //*EDIT*//params.setFocusMode("continuous-picture");
    //It is better to use defined constraints as opposed to String, thanks to AbdelHady
    params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
    c.setParameters(params);
    
    0 讨论(0)
  • 2020-12-02 14:53

    This works perfectly for preview callback:

    Camera.Parameters parameters = camera.getParameters();
    if (parameters.getSupportedFocusModes().contains(
            Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
        parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
    }
    camera.setParameters(parameters);
    
    0 讨论(0)
  • 2020-12-02 15:00

    you can try code:

    ShutterCallback _pfnShutterCallback = new ShutterCallback() {
    
            @Override
            public void onShutter() {
                // TODO Auto-generated method stub
    
            }
    
        };
    
        PictureCallback _pfnRawPictureCallback = new PictureCallback() {
    
            @Override
            public void onPictureTaken(byte[] data, Camera camera) {
                // TODO Auto-generated method stub
    
            }
        };
    
        private AutoFocusCallback _pfnAutoFocusCallback = new AutoFocusCallback() {
    
            @Override
            public void onAutoFocus(boolean success, Camera camera) {
                // TODO Auto-generated method stub
                camera.autoFocus(null);
                camera.takePicture(_pfnShutterCallback, _pfnRawPictureCallback,
                        mPicture);
    
            }
        };
        private PictureCallback mPicture = new PictureCallback() {
    
            public void onPictureTaken(byte[] data, Camera camera) {
                new SavePhotoTask().execute(data);
                camera.startPreview();
    
            }
        };
    class SavePhotoTask extends AsyncTask<byte[], String, String> {
    // Process save file image
    }
    

    call capture : mCamera.autoFocus(autoFocusCallback);

    You can refer at: http://android-er.blogspot.com/2011/01/start-camera-auto-focusing-autofocus.html

    0 讨论(0)
  • 2020-12-02 15:01

    Following code works for me.

    Setting autofocus (preview class):

    Parameters params = camera.getParameters();
    params.setFocusMode(Parameters.FOCUS_MODE_AUTO);
    //some more settings
    camera.setParameters(params);
    

    Call camera for shot a picture in case that autofocus is ready (activity class):

    public void butClick(View v){
        preview.camera.autoFocus(new AutoFocusCallback() {
            public void onAutoFocus(boolean success, Camera camera) {
                if(success){
                    camera.takePicture(shutterCallback, rawCallback, jpegCallback);
                }
            }
        });
    }
    

    Get picture (activity class):

    PictureCallback jpegCallback = new PictureCallback() {
        public void onPictureTaken(byte[] data, Camera camera) {
            //do something
        }
    };
    
    0 讨论(0)
  • 2020-12-02 15:03

    Try to use Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO or Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE. See below:

    Camera.Parameters params = camera.getParameters();
    if (params.getSupportedFocusModes().contains(
        Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) {
      params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
    }
    camera.setParameters(params);
    

    It's important to test whether the phone is supporting your chosen mode before attempting to use it, otherwise setParameters() will throw a runtime exception. (Edit code now working properly)

    0 讨论(0)
提交回复
热议问题