Когда прошивать в камере 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(); }
}

Если вспышка выключена, я получаю действительно хорошее изображение. Однако, если я включу вспышку и попытаюсь сделать снимок, вспышка действительно мигает, но в результате получается фотография без вспышки, как если бы вспышка была выключена.

Я новичок в работе с камерой, но я уверен, что когда вспышка мигает, а затем вызывается метод getBitmap(), в тот момент, когда он получает растровое изображение, вспышка уже погасла или уже моргнула. Есть ли способ отложить вспышку до завершения метода getBitmap()? Каков наилучший подход для этого?


person Ravers    schedule 26.09.2016    source источник


Ответы (2)


Чтобы сделать снимок со вспышкой, используйте params.setFlashMode(Parameters.FLASH_MODE_ON)

person Sunil Kumar Sahoo    schedule 26.09.2016
comment
И где я должен установить параметры? Я попытался установить FLASH_MODE_ON непосредственно перед getBitmap(), и на этот раз вспышка даже не моргнула. Должен ли я поместить параметры в другое место? - person Ravers; 26.09.2016
comment
Итак, сначала установите FLASH_MODE_TORCH на 2 секунды, а затем установите FLASH_MODE_ON. - person Sunil Kumar Sahoo; 26.09.2016

private boolean flashmode = false;


    // check the flash is available or not by writing this code in onCreate

        if (!getBaseContext().getPackageManager().hasSystemFeature(
                    PackageManager.FEATURE_CAMERA_FLASH)) {
                buttonTurnFlash.setVisibility(View.GONE);
            }

и вызовите метод flashOnButton() в ur onClick кнопки.

 private void flashOnButton() {
        if (camera != null) {
            try {
                Camera.Parameters param = camera.getParameters();
                param.setFlashMode(!flashmode ? Camera.Parameters.FLASH_MODE_TORCH
                        : Camera.Parameters.FLASH_MODE_OFF);
                camera.setParameters(param);
                flashmode = !flashmode;
            } catch (Exception e) {
               `enter code here` // TODO: handle exception
            }
        }
    }
person pankaj khedekar    schedule 26.09.2016