Моя камера2 API застревает при съемке

Я создаю приложение камеры с помощью 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();

        }
    });
}

Есть ли способ сделать снимок и вернуться к камере быстрее? Любая поправка, лучший метод?

@shriyans_varma, ваш вопрос: почему ваше приложение заблокировано ?!

Amir133 17.09.2018 10:44

да, это похоже на то, почему мое приложение застревает при нажатии кнопки камеры (вызывается onTakePhotoButtonClicked ()), и как только изображение делается из предварительного просмотра и сохраняется, камера в норме. У меня вопрос, как мне устранить эту задержку и нормально запустить камеру на переднем плане, пока изображение сохраняется?

user9708507 17.09.2018 11:01
0
2
218
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Потому что вы сохраняете растровое изображение в потоке пользовательского интерфейса. Вы должны сохранить растровое изображение в рабочем потоке.

И, если вы хотите делать снимки, вам лучше использовать ImageReader Api. Я думаю, что сохранение растрового изображения TextureView - не лучшая идея.

Да, это имеет смысл. Я также использую ImageReader API. Большое спасибо за ваше предложение.

user9708507 18.09.2018 12:28

Другие вопросы по теме