2012-09-17 65 views
5

我正在開發一個應用程序,需要使用分辨率高於(2000 x 2000)的圖像才能進行文本清晰。什麼是處理非常高分辨率圖像的最佳方法?

我有一個背景圖片,我需要使用相同的分辨率顯示疊加圖片。重疊的數量是可變的,從2〜30

作爲加載與UIImage的圖像,它需要4個字節的每個像素,因此,如果一個圖像具有分辨率3000x3000,它會佔用到34 MB的內存, 15 MB爲2000×2000

那問題出在哪裏升起,在3GS裝載4-5圖像之後應用程序崩潰,並且iPhone 4的11-13圖像

的疊加需要準確地放置在其上背景圖像。它們就像我們在Google地圖流量疊加層中所擁有的一樣。這並不排除平鋪,但使任務相對複雜。

我應該如何處理這個問題?

+1

此問題可以通過平鋪或重新考慮業務邏輯來解決。 – JehandadK

+0

是的,我想知道如果沒有平鋪,我可以處理這個問題。 –

+0

我假設你在使用MapKit時考慮到你提到了Overlays和Google Maps。 MKOverlayView *是*平鋪視圖,因此您可能不應排除平鋪。 MK框架將在覆蓋視圖中調用'drawMapRect:zoomScale:inContext:',並且作爲最佳實踐,您應該*只*根據提供的邊界矩形渲染內容。 –

回答

0

當然,您不能一次將整個圖像集加載到內存中。 您只需加載圖像數據的可見部分,並應儘快卸載不可見部分。

如果你想在QuartzCore級別解決這個問題,那麼CATiledLayer類就是爲了這個目的。

蘋果參考:https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CATiledLayer_class/Introduction/Introduction.html

蘋果示例代碼:https://developer.apple.com/library/mac/#samplecode/CALayerEssentials/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008029

附加信息:http://red-glasses.com/index.php/tutorials/catiledlayer-how-to-use-it-how-it-works-what-it-does/

要使用這一層,你需要源圖像分割成許多瓦片。並在圖層需要時供應它們。 (drawLayer:inContext:方法)。該方法將在非主線程上調用,所以用戶界面不會被阻塞。不要忘記釋放隱形瓷磚的圖像以節省內存。

此外,您可以使用後臺線程使用低級別的OpenGL代碼實現動態資源加載。在這種情況下,您可以使用PVRTC有損內存壓縮,這可以節省視頻內存使用量,但這確實很痛苦,而且很耗時。我推薦使用CATiledLayer。這對大多數情況已經足夠了。

相關問題