我正在使用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();
}
});
}
有没有一种方法可以使照片拍摄更快地回到相机上? 有什么更好的更正方法吗?
答案 0 :(得分:0)
因为要在UI线程中保存位图。 您应该在工作线程中保存一个位图。
而且,如果要拍照,最好使用ImageReader Api。 我认为保存TextureView的位图不是一个好主意。