2011-10-31 84 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。