将图像从曲面视图保存到DCIM目录

时间:2017-10-26 15:28:52

标签: java android android-camera surfaceview

所以我有一个框架视图,我使用SurfaceView流式传输摄像机视图。 我想将拍摄的图像保存到尚不存在的新文件夹DCIM/ZES。在下面的代码中,我得到正确的路径,并在第一次尝试后mkdirs()返回true。即使exists()方法将返回true

,也无法创建目录

在第一次尝试同一个目录后。

获取输出文件名创建目录:

private static File getOutputMediaFile(int type){
    // getting the 'MES' folder route
    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_DCIM), "MES");
    Log.i("CAMERA", "SAVING IMAGE TO FILE");
    // Create the storage directory if it does not exist
    if (!mediaStorageDir.exists()){
        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());
    File mediaFile;
    if (type == MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE){
        mediaFile = new File(mediaStorageDir.getAbsolutePath() + File.separator +
                "IMG_"+ timeStamp + ".jpg");
    } else if(type == MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO) {
        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
                "VID_"+ timeStamp + ".mp4");
    } else {
        return null;
    }

    return mediaFile;
}

保存图片:

Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera c) {
        File pictureFile = getOutputMediaFile(MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE);
        if (pictureFile == null){
            Log.d("CAMERA", "Error creating media file, check storage permissions");
            return;
        }


        try {
            FileOutputStream fos = new FileOutputStream(pictureFile);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos);
            fos.close();
            Log.i("FILE", "File was saved in " + pictureFile.getName());

        } catch (FileNotFoundException e) {
            Log.e("CAMERA", "File not found: " + e.getMessage());
        } catch (IOException e) {
            Log.e("CAMERA", "Error accessing file: " + e.getMessage());
        }
    }
};

然后我在pictureCallback方法中使用了takePicture(),这样就可以了。

不起作用的是:没有保存图片。没有创建目录(我可以看到)。首次尝试后使用exists()返回true检查目录是否存在。

在网上寻找解决方案的一整天,但没有成功, 尝试使用MediaStore.Images.Media.insertImage()方法,但无法配置目录图像被保存,所以它没有用。

真的很沮丧这个

感谢您的帮助

0 个答案:

没有答案