簡體   English   中英

如何僅將最后拍攝的圖像保存到目錄?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM