Я создаю приложение камеры с помощью 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();
}
});
}
Есть ли способ сделать снимок и вернуться к камере быстрее? Любая поправка, лучший метод?
да, это похоже на то, почему мое приложение застревает при нажатии кнопки камеры (вызывается onTakePhotoButtonClicked ()), и как только изображение делается из предварительного просмотра и сохраняется, камера в норме. У меня вопрос, как мне устранить эту задержку и нормально запустить камеру на переднем плане, пока изображение сохраняется?
Потому что вы сохраняете растровое изображение в потоке пользовательского интерфейса. Вы должны сохранить растровое изображение в рабочем потоке.
И, если вы хотите делать снимки, вам лучше использовать ImageReader Api. Я думаю, что сохранение растрового изображения TextureView - не лучшая идея.
Да, это имеет смысл. Я также использую ImageReader API. Большое спасибо за ваше предложение.
@shriyans_varma, ваш вопрос: почему ваше приложение заблокировано ?!