2013-04-23 121 views
0

我想在imageview中顯示高分辨率圖像。下面是我做什麼iOS - 查看高分辨率圖像

  1. 在後臺
  2. 當文件被加載準備的UIImage,切換到主線程
  3. 顯示圖像[使用的UIImageView的setImage:]

問題第三步是否存在滯後?它需要幾秒鐘並加載文件。如果它的圖像很大,我會收到內存警告和崩潰。 那麼有沒有一種方法可以從上到下繪製圖像(比如瀏覽器的功能)?另外我需要保留圖像的質量。

有沒有一種方法可以達到我的要求。在此先感謝

+0

爲什麼不在後臺線程中縮放圖像? – 2013-04-23 06:53:35

+0

縮放會導致質量下降。我需要支持縮放 – Dhilip 2013-04-25 07:15:00

回答

1

如果它的大圖像,我得到內存警告和崩潰。

看起來您正在嘗試加載一次性圖像並將其顯示到內存中,您的設備出現了一些「硬」(內存相關)限制。

那麼,我可以從上到下繪製圖像的方式(如瀏覽器如何)?

您應該嘗試使用CATiledLayer,它提供了一種繪製非常大的圖像而不會導致內存命中的方法。

Here你可以找到關於它的教程。

你也可以給看看PhotoScrollerNetwork項目:

  • 極快的瓷磚渲染 - 比蘋果的代碼(它使用PNG文件在文件系統)

  • 視覺上非常非常快

    您提供一個單一的JPEG文件或URL和這個代碼全部平鋪爲您,快速,輕鬆地

+0

謝謝sergio ..我正在調查它 – Dhilip 2013-04-25 07:14:25

1

UIImage將不會解碼其底層圖像數據,直到它實際上被請求,這將在您將其分配給圖像視圖時發生在主線程上。因此,雖然您試圖在後臺線程中加載圖像,但工作正在延遲並且實際上發生在主線程中。

對這個問題的解決方法很詭異,通常涉及將圖像寫入新的圖形上下文以強制解碼,然後從中創建CGImageRefUIImage。這一切都發生在後臺線程上。當您將新圖像發送到主線程時,所有解碼已經發生,您不應該看到延遲。 This question has some answers which demonstrate this technique.

用Apple提供的標準API(據我所知)從上到下繪製圖像是不可能的。你將不得不編寫自己的流媒體圖像解碼器,這將是一項重大任務。

+0

感謝邁克..我正在研究它 – Dhilip 2013-04-25 07:17:37

1

您可以使用SDWebImage框架,它可以幫助您:

1.An異步圖像下載

2.自動圖像緩存。

3.避免重複。

您可以下載這個:https://github.com/rs/SDWebImage

關於內存警告它不僅是由於您的應用程序了由於從後臺運行,從而嘗試停止後臺運行的應用程序的所有應用程序有效的內存使用。

+0

感謝您的建議.SDWebImage做了一些壓縮和解壓縮,我失去了質量。這是不禮貌的要求用戶殺死後臺應用程序 – Dhilip 2013-04-25 07:16:20