【问题标题】:When to flash in TextureView camera何时在 TextureView 相机中闪烁
【发布时间】:2016-09-26 11:18:16
【问题描述】:

我的应用程序中有一个自定义相机的片段,我正在尝试为我的相机实现闪光灯开/关按钮。

现在我有这样的东西:

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() 方法完成?最好的方法是什么?

【问题讨论】:

    标签: java android camera textureview


    【解决方案1】:

    要使用闪光灯模式拍照,请使用params.setFlashMode(Parameters.FLASH_MODE_ON)

    【讨论】:

    • 我应该在哪里设置参数?我试图在 getBitmap() 之前设置 FLASH_MODE_ON,这一次 flash 甚至没有闪烁。我应该把参数放在其他地方吗?
    • 所以先设置FLASH_MODE_TORCH 2秒再设置FLASH_MODE_ON
    【解决方案2】:
    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);
                }
    

    并在按钮的 onClick 中调用 flashOnButton() 方法。

     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
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 2015-03-16
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多