Я хочу автофокусировать камеру Android, как только камера держится. Я ищу учебники или образцы, как это сделать, или, по крайней мере, небольшой образец, который показывает, какие классы я могу использовать для привязки к таким событиям.
Как автоматически автофокусировать камеру Android?
Ответ 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);