我正在尝试按照关于此问题的其他主题的建议编写和读取位图,当我尝试读取保存图像的路径时,我永远不会得到位图:
所以我要写这个位图:
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变量没有价值:/。
任何帮助?
由于
答案 0 :(得分:0)
所以我要写这个位图:
您保存的文件名为captured
。
我将返回的路径传递给另一个活动,然后我将其作为参数传递,以获得像这样的位图
在这里,您正在尝试加载captured.jpg
,而不是captured
。
您可以通过让第一个方法返回第二个方法随后使用的File
来避免此类问题。
此外:
使用具有内存缓存的图像加载库(例如,Picasso,Glide),这样就不会浪费用户从磁盘重新加载相同位图的时间
从第一种方法中删除ContextWrapper
,因为您不需要它