我一直在寻找解决问题的方法,但似乎无法弄清楚。我敢肯定这可能是 1 或 2 条简单的线条,希望有人能引导我朝着正确的方向前进。
在我的应用程序中,用户可以单击一个按钮来打开图库。一旦他们选择了一个图像,它就会在我的应用程序的 ImageView 中显示该图像。那部分工作得很好。最初,我只是让它从画廊返回一个 uri,然后我会直接用这个来显示它:
imageView1.setImageURI(myUri);
好吧,如果用户连续多次重新加载该页面,显然我现在会遇到可怕的“内存不足”错误,因此我必须清理我的代码以缩小图像。我通过实现一个位图类来实现这一点,该类将图像转换为位图并为我缩小它。现在,我的 ImageView 显示代码如下所示:
imageView1.setImageBitmap(bitmap1);
那部分也工作正常。这是问题:
我将 uri 路径转换为字符串,然后将其保存在 SharedPreference 中。这样当用户退出应用程序并稍后返回时,他们设置的图像会自动显示。我像这样转换uri:
...
selectedImageUri = data.getData();
String selectedImagePath;
selectedImagePath = getPath(selectedImageUri);
...
检索 SharedPreference String 的旧方法,将其转换为 uri,然后显示它工作正常。(当然除了内存不足错误)它看起来像这样:
Uri myUri = Uri.parse(selectedImagePath);
imageView1 = setImageURI(myUri);
“selectedImagePath”显然是我从 SharedPreference 中检索到的字符串。同样,这工作正常,但如果重新加载太多次会抛出错误。
现在不工作的部分是当我尝试实现新的位图转换时,我可以缩放位图而不会出现内存错误。这是代码:
Uri myUri = Uri.parse(selectedImagePath)
Bitmap bitmap = getThumbnail(myUri);
imageView1.setImageBitmap(bitmap);
这不显示任何内容。选择的原始图像可以很好地显示图像,但是当我返回此屏幕并尝试从 SharedPreference 解析字符串然后将其转换为位图时,什么都没有显示。“getThumbnail”方法的代码直接取自这篇文章--->
这是第三个答案。
有人有想法么?很抱歉这篇超长的帖子,但我宁愿过度解释我的问题,也不愿提供足够的信息。抱歉,如果在其他地方回答了这个问题。我一直在寻找其他几个小时的问题,但没有找到任何可以解决我问题的东西。
谢谢。