[英]How can I save only the last taken image to directory?
在這里,我創建了一個應用程序來拍攝圖像並將其保存到手機的外部存儲中。 (下面的代碼也存在一個問題,即圖像未保存到給定位置。) 我只希望將最后拍攝的圖像保存在手機的外部存儲器中。每次拍攝新照片時,都需要刪除以前的圖像拍攝的圖像,僅保存最后拍攝的圖像 。 我該怎么做? 是否可以按固定間隔連續拍攝圖像? 我搜索了一下,發現可以用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;
}
}
您可以為照片文件保留一個恆定的名稱。
String fname = "MyImage.jpg";
您可以給一些常數名稱。 關於定期拍攝圖像,您可以使用處理程序。 您可以在此處了解更多信息。 並確保在關閉相機后卸下處理器。
編輯您可以列出目錄中的文件mediaStorageDir
。 列出目錄中的所有文件,並通過比較最后修改的文件來刪除較舊的文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.