读取和写入android的位图失败

时间:2017-06-30 13:16:22

标签: java android file bitmap android-file

我正在尝试按照关于此问题的其他主题的建议编写和读取位图,当我尝试读取保存图像的路径时,我永远不会得到位图:

所以我要写这个位图:

private String saveToInternalStorage(Bitmap bitmapImage){
        ContextWrapper cw = new ContextWrapper(getApplicationContext());
        // path to /data/data/yourapp/app_data/imageDir
        File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
        // Create imageDir
        File mypath=new File(directory,"captured");

        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(mypath);
            // Use the compress method on the BitMap object to write image to the OutputStream
            bitmapImage.compress(Bitmap.CompressFormat.JPEG, 100, fos);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return directory.getAbsolutePath();
    }

}

我将返回的路径传递给另一个活动,然后我将其作为参数传递,以获得如下位图:

 private void loadImageFromStorage(String path)
    {

        try {
            File f=new File(path, "captured.jpg");
            Log.d("filehe",f.toString());
            b = BitmapFactory.decodeStream(new FileInputStream(f));
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }

    }

我觉得我在这里做错了什么,但无法弄清楚是什么,b变量没有价值:/。

任何帮助?

由于

1 个答案:

答案 0 :(得分:0)

  

所以我要写这个位图:

您保存的文件名为captured

  

我将返回的路径传递给另一个活动,然后我将其作为参数传递,以获得像这样的位图

在这里,您正在尝试加载captured.jpg,而不是captured

您可以通过让第一个方法返回第二个方法随后使用的File来避免此类问题。

此外:

  • 使用具有内存缓存的图像加载库(例如,Picasso,Glide),这样就不会浪费用户从磁盘重新加载相同位图的时间

  • 从第一种方法中删除ContextWrapper,因为您不需要它