4

我正在尝试从 SD 卡缩放位图并将其写入手机内存。然后稍后将其解码以将其添加到HashMap.

问题是我得到文件未找到异常,尽管路径正确并且缩放图像存在(我检查过)

这是保存部分

        Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream, null, options );         
        File imageRootPath = getFilesDir();
        File imageRoot = new File(imageRootPath, imagUri.getLastPathSegment()+".png");
        FileOutputStream out = new FileOutputStream(imageRoot);
        yourSelectedImage.compress(Bitmap.CompressFormat.PNG, 90, out);

这是我阅读文件时的部分

try {
Uri mainImgeUri = Uri.parse(imageRoot.toString());
File imageFile = new File(mainImgeUri.toString());
if(imageFile.exists()){
   System.out.println("it does");
}
InputStream imageStream = ListPropertiesBaseActivity.this.getContentResolver().openInputStream(mainImgeUri); // I am getting file not found error

Bitmap yourSelectedImage =BitmapFactory.decodeStream(imageStream);
hmBitmap.put(ID, yourSelectedImage);
imageStream.close();
} catch (Exception e) {

e.printStackTrace();
}

难道是OpenInputStream无法从手机内部存储器中读取?或者可能是保存后的图像不好?

虽然我可以通过手动浏览文件并打开它来查看它

请注意 System.out.Println 被执行所以这意味着文件存在

4

3 回答 3

2

您是否尝试过记录 imageStream 以查看 uri 实际上是什么?

于 2013-02-27T17:24:05.750 回答
1

使用您的 uri创建一个File对象mainImgeUri并检查文件是否存在,将此文件传递给openInputStream()方法

于 2013-02-27T16:53:55.353 回答
1

我找到了。好吧,我找到了解决方法,但我永远无法解释以前的行为以及为什么它不起作用。我用这个 getContentResolver 替换了

FileInputStream fis = new FileInputStream(imageFile);
Bitmap yourSelectedImage =BitmapFactory.decodeStream(fis);

这行得通。知道为什么!尽管

于 2013-02-27T17:54:27.233 回答