web-dev-qa-db-fra.com

Comment mettre au point la caméra Android automatiquement?

Je veux mettre au point la caméra Android dès que la caméra est immobile. Je cherche des tutoriels ou des exemples sur la façon de le faire, ou du moins un petit échantillon indiquant les classes que je peux utiliser pour accrocher de tels événements.

47
Alexey Zakharov

Pour moi, cela a fonctionné un régal:

//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);
113
luke-009

Essayez d'utiliser Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO ou Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE. Voir ci-dessous:

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

Il est important de vérifier si le téléphone prend en charge le mode choisi avant de l'utiliser, sinon setParameters() lève une exception d'exécution .

55
dcoz

Le code suivant fonctionne pour moi.

Définition de la mise au point automatique (classe de prévisualisation):

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

Appelez l'appareil photo pour prendre une photo au cas où l'autofocus serait prêt (classe d'activité):

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

Obtenir une image (classe d'activité):

PictureCallback jpegCallback = new PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera) {
        //do something
    }
};
17

On dirait que vous devriez mise au point automatique continue comme indiqué ici.

Il y a une question ici que vous pouvez référencer.

7
Kgrover

Cela fonctionne parfaitement pour le rappel de prévisualisation:

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
Nagendra Singh

vous pouvez essayer le 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
}

capture d'appel: mCamera.autoFocus(autoFocusCallback);

Vous pouvez vous référer à: http://Android-er.blogspot.com/2011/01/start-camera-auto-focusing-autofocus.html

0
D T