2016-09-26 2 views
0

У меня есть фрагмент для пользовательской камеры в моем приложении, и я пытаюсь реализовать кнопку включения/выключения вспышки для своей камеры.Когда в камеру 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() метод завершен? Что для вас лучше всего подходит?

ответ

0

Чтобы сфотографировать режим вспышки использовать params.setFlashMode(Parameters.FLASH_MODE_ON)

+0

И где я должен установить параметры? Я попытался установить FLASH_MODE_ON непосредственно перед getBitmap(), и на этот раз вспышка даже не мигала. Должен ли я помещать параметры в другое место? – Ravers

+0

Итак, сначала установите FLASH_MODE_TORCH в течение 2 секунд, а затем установите FLASH_MODE_ON –

0
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() в Уре 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 
      } 
     } 
    } 
Смежные вопросы