Подтвердить что ты не робот

Как автоматически автофокусировать камеру Android?

Я хочу автофокусировать камеру Android, как только камера держится. Я ищу учебники или образцы, как это сделать, или, по крайней мере, небольшой образец, который показывает, какие классы я могу использовать для привязки к таким событиям.

4b9b3361

Ответ 1

Для меня это сработало:

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

Ответ 2

Попробуйте использовать Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO или Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE. См. Ниже:

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

Важно проверить, поддерживает ли телефон ваш выбранный режим, прежде чем пытаться его использовать, иначе setParameters() выдаст исключение во время выполнения. (Изменить код теперь работает правильно)

Ответ 3

Следующий код работает для меня.

Настройка автофокуса (класс предварительного просмотра):

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

Вызовите камеру для съемки снимка в случае готовности автофокуса (класс активности):

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

Получить изображение (класс активности):

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

Ответ 4

Похоже, вы должны непрерывный автофокус, как обсуждается здесь.

Здесь есть вопрос , который вы можете указать.

Ответ 5

вы можете попробовать код:

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
}

вызов: mCamera.autoFocus(autoFocusCallback);

Вы можете обратиться по адресу: http://android-er.blogspot.com/2011/01/start-camera-auto-focusing-autofocus.html

Ответ 6

Это отлично работает для обратного вызова предварительного просмотра:

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