2013-03-25 11 views
40

Chcę automatycznie ustawić ostrość aparatu Android, gdy tylko aparat trzyma nieruchomo. Zamierzam poszukać samouczków lub próbek, jak to zrobić, lub przynajmniej niewielkiej próbki, która pokazuje, jakie klasy mogę wykorzystać do przechwycenia takich zdarzeń.Jak automatycznie ustawić ostrość aparatu z Androidem?

+0

możliwe duplikat [Android Camera AutoFocus on Demand] (http://stackoverflow.com/questions/5878042/android- autofocus-on-demand) – swiftBoy

Odpowiedz

98

Dla mnie to pracowała doskonale:

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

bardzo dobra odpowiedź –

+1

Min SDK 14 do tego. Czy istnieje sposób na Min SDK <14? – patrickjason91

+0

nie działa w moim przypadku. –

0

można spróbować Kod: capture

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 
} 

wezwanie: mCamera.autoFocus(autoFocusCallback);

Można odwołać się pod adresem: http://android-er.blogspot.com/2011/01/start-camera-auto-focusing-autofocus.html

13

obserwuję Kod działa dla mnie.

Ustawianie autofokusa (klasa podgląd): kamera

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

Zaproszenie do strzału obrazu w przypadku, gdy autofokus jest gotowy (klasa aktywności):

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

obraz Get (klasa aktywności):

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

odpowiedź "Jens van de Mötter" jest lepsza od innych, ponieważ kamera jest ustawiana automatycznie tylko wtedy, gdy zamierzamy ją przechwycić. Myślę, że oszczędza to trochę energii. –

+0

Świetna i kompletna odpowiedź! Dziękuję Ci. –

+0

Dlaczego ustawienie autofokusa przechodzi do klasy podglądu? Wydaje mi się, że bardziej odpowiednia byłaby klasa aktywności. –

45

Spróbuj użyć Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO lub Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE. Patrz poniżej:

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

Ważne jest, aby sprawdzić, czy telefon jest wspieranie wybranego trybu przed przystąpieniem do korzystania z niego, inaczej setParameters() rzuci wyjątek czasu wykonywania. (Edycja kodu teraz działa poprawnie)

+0

To działało idealnie w moim przypadku. –

+0

działa w trybie autofokusa, ale po rozpoczęciu nagrywania ponownie traci ostrość – htafoya

+0

Nieważne, ponownie otwierałem kamerę, aby utracić pierwsze uprawnienia. – htafoya

0

Działa to doskonale dla podglądu 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); 
Powiązane problemy