2013-03-25 8 views
40

Ich möchte Android-Kamera Autofokus, sobald die Kamera noch hält. Ich suche nach Tutorials oder Beispielen, wie es geht oder zumindest kleine Beispiele, die zeigen, welche Klassen ich verwenden kann, um solche Ereignisse anzuhängen.Wie automatisch Autofokus Android Kamera?

+0

möglich Duplikat [Android-Kamera Autofokus-on-Demand] (http://stackoverflow.com/questions/5878042/android- Kamera-Autofokus-on-Demand) – swiftBoy

Antwort

98

Für mich war dieses ein Genuss:

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

sehr gute Antwort –

+1

Min SDK 14 dafür. Gibt es eine Möglichkeit für Min SDK <14? – patrickjason91

+0

funktioniert nicht in meinem Fall. –

0

Sie versuchen, Code kann:

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 
} 

Anrufaufzeichnung: mCamera.autoFocus(autoFocusCallback);

Sie beziehen sich auf: http://android-er.blogspot.com/2011/01/start-camera-auto-focusing-autofocus.html

13

Nach Code funktioniert für mich.

Einstellung Autofokus (Vorschau-Klasse):

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

Anruf Kamera Schuss ein Bild in dem Fall, dass Autofokus bereit (Aktivitätsklasse):

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 Bild (Aktivitätsklasse):

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

Antwort von "Jens van de Mötter" ist besser als andere, weil die Kamera Autofokus nur wenn wir capture.so ich denke, es spart Bit Energie. –

+0

Große und vollständige Antwort! Danke. –

+0

Warum wird der Autofokus in der Vorschauklasse eingestellt? Scheint mir wie Aktivitätsklasse wäre angemessener. –

45

Versuchen Sie Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO oder Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE zu verwenden. Siehe unten:

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

Es ist wichtig, zu prüfen, ob das Telefon gewählten Modus unterstützt, bevor es zu benutzen, sonst setParameters() eine Laufzeitausnahme werfen. (Edit Code arbeitet jetzt richtig)

+0

Es funktionierte perfekt auf meinem Fall. –

+0

funktioniert, um Autofokus-Kamera, aber sobald ich Aufnahme starten, verliert es wieder Fokus – htafoya

+0

Nevermind, ich öffnete die Kamera wieder, so dass es die ersten Berechtigungen verloren. – htafoya

0

Dies funktioniert perfekt für die Vorschau Rückruf:

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