2012-08-29 39 views
1

我在使用bitmapfactory.decodestream从Internet加载图像时遇到了问题。例如,这形象: https://portal.apprenticexm.nl/appportal/public/apps/1/media/807162_88149365.jpgBitMapFactory.decodeStream尝试在小图像上分配多于20 MB

这是刚刚超过100 KB的大小,而且取决于bitmapfactory.decodestream错误说我尝试分配更多的则20 MB: 产生的原因:java.lang.OutOfMemoryError:位图大小超过虚拟机预算(堆大小= 8007KB,分配= 3662KB,位图大小= 23756KB)

我希望有人能够解决这个问题。

最佳, 彼得

+0

lock at this answer:http://stackoverflow.com/questions/477572/android-strange-out-of-memory-issue-while-loading-an-image-to-a-bitmap-object/823966# 823966 – Pasha

+0

我已经看到了这些答案,但是您能否解释一下100KB的图像如何发生超过20 MB的情况? – user1632374

回答

0

在磁盘上的大小无关,与位图的内存大小。在第一种情况下,图像被压缩,而位图则只是一组原始像素。您还必须考虑诸如图像配置之类的东西。如果我记得没错,JPG格式不支持alpha通道,因此更轻盈比ARGB_8888

的Android的默认配置

您可以控制如何加载与BitmapFactory.Options

+0

但是,如果我将图像缩小到最大屏幕尺寸,我不应该遇到问题(除了使用的图像总数)? – user1632374

4

亚历克斯·奥尔洛夫说图象:“磁盘上的大小与内存中的位图大小无关,在第一种情况下,图像是压缩的,而位图则只是一组原始像素。“然而,即使考虑到它是以原始图像的形式存储的,20MB仍然过多。如果我们考虑每像素4B,那将是5Mpix的图像,但是你发布的那个图像确实更小。

我有类似的问题:我正在加载一个原始格式为8MB的图像,但是,分配了32MB的图像。后来我发现这是由dpi缩放引起的。如果您的图像位于“可绘制”文件夹中,则会根据当前的屏幕dpi自动缩放图像。我有一个XHDPI屏幕,所以我的图像水平缩放2倍,垂直缩放2倍,这就是为什么它需要4倍的内存。

你可以找到更多有关dpi的是如何在这里工作:http://developer.android.com/guide/practices/screens_support.html

如果你不想使用这种自动机器人的功能和规模的图像你自己,只需重命名你的“绘制”文件夹“可绘-nodpi”。标记为“nodpi”的“drawable”文件夹中的所有图像将按原样加载。

相关问题