У меня есть фрагмент для пользовательской камеры в моем приложении, и я пытаюсь реализовать кнопку включения/выключения вспышки для своей камеры.Когда в камеру TextureView
Сейчас у меня есть что-то вроде этого:
private Camera camera;
private Camera.Parameters params;
private boolean flash;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// ...
// Flash on/off button click;
final ImageButton buttonTurnFlash = (ImageButton) view.findViewById(R.id.button_turn_flash);
buttonTurnFlash.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { turnFlash(); }
});
}
private void turnFlash() {
if (flash) flash = false;
else flash = true;
}
И тогда я называю этот метод, когда пользователь нажимает на кнопку «Сделать фото»:
private void takePicture() {
try {
if (flash) {
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
}
final Bitmap bitmap = textureView.getBitmap();
final FileOutputStream fos = Controller.getContext().openFileOutput("image.jpg", Context.MODE_PRIVATE);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.close();
} catch (Exception e) { e.printStackTrace(); }
}
Если вспышка выключена, I получить действительно хорошую картину. Однако, если я включаю вспышку и пытаюсь сделать снимок, вспышка действительно мигает, но результатом является фотография без вспышки, точно так же, как вспышка выключена.
Я довольно новичок на вещах камеры, но я уверен, что, когда вспышка мигает, а затем вызвать метод getBitmap(), в тот момент он получает растровое изображение, вспышка уже нет или уже моргнул. Есть ли способ задержать вспышку до getBitmap() метод завершен? Что для вас лучше всего подходит?
И где я должен установить параметры? Я попытался установить FLASH_MODE_ON непосредственно перед getBitmap(), и на этот раз вспышка даже не мигала. Должен ли я помещать параметры в другое место? – Ravers
Итак, сначала установите FLASH_MODE_TORCH в течение 2 секунд, а затем установите FLASH_MODE_ON –