【发布时间】:2018-02-17 03:32:13
【问题描述】:
在这里,我创建了一个应用程序来拍摄图像并将它们保存到手机的外部存储中。 (以下代码也存在图像未保存到给定位置的问题。)我只想将最后拍摄的图像保存在手机的外部存储器中。每次拍摄新照片时,我都需要删除之前拍摄的图像并仅保存最后拍摄的图像。我该怎么做? 还可以定期连续拍摄图像吗?我搜索并发现我可以使用 Timer() 来完成。可能吗?谢谢。
编辑-实际上我想要的是比较两个图像。一张是现在拍摄的,另一张是在它之前拍摄的。 (我定期拍摄图像,并将新的图像与之前的图像进行比较。)只有在比较之后,我才会删除之前的图像。
public class MyCamera extends Activity {
private Camera mCamera;
private CameraPreview mCameraPreview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCamera = getCameraInstance();
mCameraPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mCameraPreview);
Button captureButton = (Button) findViewById(R.id.button_capture);
captureButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCamera.takePicture(null, null, mPicture);
}
});
}
/**
* Helper method to access the camera returns null if it cannot get the
* camera or does not exist
*
* @return
*/
private Camera getCameraInstance() {
Camera camera = null;
try {
camera = Camera.open();
} catch (Exception e) {
// cannot get camera or does not exist
}
return camera;
}
PictureCallback mPicture = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File pictureFile = getOutputMediaFile();
if (pictureFile == null) {
return;
}
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
Log.d(TAG, e.getMessage());
} catch (IOException e) {
Log.d(TAG, e.getMessage());
}
}
};
private static File getOutputMediaFile() {
File mediaStorageDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
"MyCameraApp");
if (!mediaStorageDir.exists()) {
mediaStorageDir.mkdirs();
if (!mediaStorageDir.mkdirs()) {
Log.d("MyCameraApp", "failed to create directory");
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
.format(new Date());
String fname = "IMG_" + timeStamp + ".jpg";
System.out.println(fname);
File mediaFile;
mediaFile = new File(mediaStorageDir, fname);
return mediaFile;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.my_camera, menu);
return true;
}
}
【问题讨论】:
-
除了删除最后一个,您可以按照下面的建议为 IMG 设置一个固定名称并覆盖它,最后一个将是当前保存的文件。如果您想保存多张“最后一张”图片,则需要将图片保留在内存中,并且可能会提供一个“是/否”屏幕来确认当前的。
标签: java android android-camera