我的camera2 API卡住了拍照

时间:2018-09-17 08:30:28

标签: android android-camera2

我正在使用Camera 2 API制作相机应用程序,我的代码显示预览效果很好,它还可以单击预览中的图片并将其存储在目录中。 我的问题是: 在拍照和存储照片时会被卡住,一旦存储了照片,相机就会正常工作。

这是我的代码,用于获取预览图像并将其存储:

onTakePhotoButtonClicked():

public void onTakePhotoButtonClicked() {
    FileOutputStream outputPhoto = null;
    try {
        outputPhoto = new FileOutputStream(createImgFile());
        preview.getBitmap()
                .compress(Bitmap.CompressFormat.PNG, 100, outputPhoto);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (outputPhoto != null) {
                outputPhoto.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

createImgFile():

private File createImgFile() throws IOException{

    String TimeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String prepend = "IMG_"+TimeStamp+"_";
    File Imgfile = File.createTempFile(prepend,".jpg",mPictureFolder);
    mPictureFileName = Imgfile.getAbsolutePath();
    Toast.makeText(getApplicationContext(),mPictureFileName.toString(),Toast.LENGTH_SHORT).show();
    return Imgfile;
}

onCreate():

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.content_mycamera_experiment);
    preview = (TextureView) findViewById(R.id.preview);
    click = (ImageButton) findViewById(R.id.click);
    createImgFolder();

    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA,
            Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_WRITE_EXTERNAL_STORAGE_PERMISSION_RESULT );

    click.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onTakePhotoButtonClicked();

        }
    });
}

有没有一种方法可以使照片拍摄更快地回到相机上? 有什么更好的更正方法吗?

1 个答案:

答案 0 :(得分:0)

因为要在UI线程中保存位图。 您应该在工作线程中保存一个位图。

而且,如果要拍照,最好使用ImageReader Api。 我认为保存TextureView的位图不是一个好主意。