代码之家  ›  专栏  ›  技术社区  ›  HMD

如何仅将上次拍摄的图像保存到目录中?

  •  0
  • HMD  · 技术社区  · 6 年前

    在这里,我创建了一个应用程序,可以拍摄图像并将其保存到手机的外部存储器中。(以下代码也存在一个问题,即图像未保存到给定位置。) 我只希望最后拍摄的图像保存在手机的外部存储器中。每次拍摄新照片时,我都需要删除以前拍摄的图像,只保存最后拍摄的图像 . 我该怎么做? 还可以定期连续拍摄图像吗? 我搜索了一下,发现我可以用计时器()来完成。有可能吗?非常感谢。

    编辑 -实际上,我想要的是将两个图像进行比较。一个是在此刻拍摄的,另一个是在它之前拍摄的。(我以固定的时间间隔拍摄图像,并将新图像与前一图像进行比较。)只有在比较之后,我才删除上一个。

    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;
        }
    
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   karandeep singh    6 年前

    您可以为照片文件保留一个固定名称。

      String fname = "MyImage.jpg";
    

    您可以提供一些常量名称。关于定期拍摄图像,可以使用handler。 你可以了解更多 here . 并确保在相机关闭时移除处理程序。

    已编辑 您可以列出目录中的文件, mediaStorageDir 在你的情况下。 列出目录中的所有文件,并通过比较上次修改的文件来删除较旧的文件。