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?
Odpowiedz
Wygląda na to, że powinieneś continuous autofocus jak to jest omówione tutaj.
Istnieje question here, do którego można się odwoływać.
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);
bardzo dobra odpowiedź –
Min SDK 14 do tego. Czy istnieje sposób na Min SDK <14? – patrickjason91
nie działa w moim przypadku. –
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
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
}
};
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. –
Świetna i kompletna odpowiedź! Dziękuję Ci. –
Dlaczego ustawienie autofokusa przechodzi do klasy podglądu? Wydaje mi się, że bardziej odpowiednia byłaby klasa aktywności. –
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)
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);
możliwe duplikat [Android Camera AutoFocus on Demand] (http://stackoverflow.com/questions/5878042/android- autofocus-on-demand) – swiftBoy