2011-10-31 59 views
0

我正在从互联网下载图像,然后在屏幕上缩放显示它们。这个想法是使用inSampleSize,因此我可以在解压缩的同时缩放大图,并防止OutOfMemory异常。但为了找到inSampleSize,我需要知道图像分辨率。它可以使用inJustDecodeBounds选项获取。互联网上的Android BitmapFactory

问题是我无法将它传递给流,并直接从互联网下载图像,因为它会下载两次(首先获取大小,然后获取缩放的位图)。我无法下载图像并将其存储在RAM中,因为图像大小可能很大。剩下的唯一解决方案是将图像下载到SD卡/内部存储器并从那里读取,但是当用户没有空间时,就会发生不好的事情。

问题是 - 有没有办法做到这一点,而不依赖于存储和RAM内存,不需要下载图像两次?或者,也许BitmapFactory不使用inJustDecodeBounds时下载整个图像,但只是头?

感谢

+0

替代ram和sd?嗯......开玩笑的人认为它的标准下载机制,不用bitmapfactory,但会期望它的行为类似。总而言之,我不明白为什么这会成为一个问题。你不能只是检查是否有空间,如果没有,你不能允许下载。 – Warpzit

+0

总是值得检查是否有更好的方法。如果能够在不下载整个文件的情况下获得图像大小,这种机制将更可靠。 –

+0

Aggree :)但你仍然有内存问题...如果有两次图片是一个问题,为什么不会一次?我只是不能让问题的意见:) – Warpzit

回答

1

如果您正在下载一个PNG,GIF或JPG,应该可以读取文件头,以确定宽度和高度,这应该意味着,您就不必下载整个文件。

This post有一些C#代码用于读取上述格式的头文件的宽度和高度,您可以将它们移植到Java中以用于Android。