2013-03-25 3 views
40

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

+0

возможно дубликат [Android камера с автофокусом и по требованию] (http://stackoverflow.com/questions/5878042/android- камера-автофокус по требованию) – swiftBoy

ответ

98

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

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

очень хороший ответ –

+1

Min SDK 14 для этого. Есть ли способ для Min SDK <14? – patrickjason91

+0

не работает в моем случае. –

0

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

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

13

После код работает для меня.

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

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 
    } 
}; 
+0

Ответ «Jens van de Mötter» лучше других, потому что камера автофокусирована только тогда, когда мы собираемся захватить. Так что я думаю, что это экономит энергию бит. –

+0

Отличный и полный ответ! Спасибо. –

+0

Почему настройка автофокуса входит в класс предварительного просмотра? Мне кажется, что класс активности будет более уместным. –

45

Попробуйте использовать 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() выбросит исключение во время выполнения. (Edit код теперь работает должным образом)

+0

Он отлично работал на моем деле. –

+0

работает с камерой с автофокусом, но как только я начинаю запись, он снова теряет фокус – htafoya

+0

Nevermind, я снова открывал камеру, поэтому он потерял первые разрешения. – htafoya

0

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

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); 
Смежные вопросы