我从我的应用程序拍照时没有创建图像目录

时间:2017-02-27 13:49:43

标签: android image android-camera save-image

我在android studio工作。建立一个app我正在使用相机。当我运行我的应用程序时,该应用程序正常。我捕捉它捕获图像的图像。但是我创建的文件夹没有显示在我的库中。我正在local storage而不是SD CARD中保存图片。我很好奇为什么文件夹没有创建,因为它没有给我任何错误,所以它应该在我的画廊。所以我重新启动我的设备,重新启动后,我可以看到我的图库中的文件夹和其中的图像。我再次打开应用程序并从中获取图像但是图像没有显示在文件夹中。

下面是我的代码,我在其中制作用于保存图像的目录

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 if(requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE)
    {
        if(resultCode == Activity.RESULT_OK)
        {
            Bitmap bmp = (Bitmap)data.getExtras().get("data");
            ByteArrayOutputStream stream = new ByteArrayOutputStream();

            bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            byte[] byteArray = stream.toByteArray();

            // convert byte array to Bitmap
            Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

            if(isStoragePermissionGranted())
            {
                SaveImage(bitmap);
            }


        }

}
 private void SaveImage(Bitmap finalBitmap) {

    String root = Environment.getExternalStorageDirectory().getAbsolutePath().toString();
    Log.v(LOG_TAG, root);
    File myDir = new File(root + "/captured_images");
    myDir.mkdirs();
    Random generator = new Random();
    int n = 1000;
    n = generator.nextInt(n);
    String fname = "Image-" + n + ".jpg";
    File file = new File(myDir,fname);
    if (file.exists())file.delete();
    try {
        FileOutputStream out = new FileOutputStream(file);
        finalBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);
        out.flush();
        out.close();


    } catch (Exception e) {
        e.printStackTrace();
    }

}

下面是我调试的图片

enter image description here

**注意:**

因为我正在使用原生相机,所以图片会保存在相机胶卷文件夹中,即设备中的默认文件夹。但保存在那里的图像不是压缩图像,压缩图像应该保存在我创建的文件夹中。

我坚持不懈,不知道该怎么做。

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

您需要调用 MediaScannerConnection scanFile(上下文上下文,String []路径,String [] mimeTypes,MediaScannerConnection.OnScanCompletedListener回调)方法。

MediaScannerConnection为应用程序提供了一种将新创建或下载的媒体文件传递到媒体扫描程序服务的方法。这将使用新保存的媒体更新您的文件夹。

    private void SaveImage(Bitmap finalBitmap) {

        //....
        if(!storageDir.exists()){
               storageDir.mkdirs();
         }
        //...
        file.createNewFile();
        try {
            MediaScannerConnection.scanFile(context, new String[]  {file.getPath()} , new String[]{"image/*"}, null);
            FileOutputStream out = new FileOutputStream(file);
            finalBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

答案 1 :(得分:0)

试试这个

private void saveBitmap(Bitmap bitmap) {
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = timeStamp + ".jpg";
        File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        final String fileLoc = storageDir.getAbsolutePath() + "/folderName/" + imageFileName;
        File file = new File(fileLoc);
        OutputStream os = null;
        try {
            os = new BufferedOutputStream(new FileOutputStream(file));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
        try {`enter code here`
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }