簡體   English   中英

在iOS中處理大圖像

[英]Handle large images in iOS

我想讓用戶在不限制大小的情況下選擇照片,然后進行編輯。

我的想法是創建一個與用於編輯的屏幕尺寸相同的大照片的縮略圖,然后,在編輯完成后,使用大照片進行與縮略圖相同的編輯。

當我使用UIGraphicsBeginImageContext創建縮略圖時,它將導致內存問題。

我知道由於硬件限制很難直接編輯整個大圖像,所以我想知道是否有一種方法可以將大圖像下采樣到不到2048 * 2048而沒有內存問題?

我發現有一個BitmapFactory類,它有一個inSampleSize選項,可以對Android平台中的照片進行下采樣。 怎么能在iOS上完成?

您需要使用UIImage來處理圖像加載, UIImage實際上並不將圖像加載到內存中,然后以您想要的結果圖像的大小創建位圖上下文(因此這將是使用的內存量)。 然后需要迭代的次數繪制從原始圖像塊(這是圖像數據的部分被加載到存儲器),使用CGImageCreateWithImageInRect到使用目的地上下文CGContextDrawImage

請參閱Apple的此示例代碼

大圖像不適合內存。 因此將它們加載到內存中然后調整它們的大小不起作用。

要處理非常大的圖像,您必須將它們平鋪。 已經有很多解決方案,例如,看看這是否可以解決您的問題:

https://github.com/dhoerl/PhotoScrollerNetwork

我實現了我自己的自定義解決方案,但這是特定於我們的環境,我們有一個運行服務器端的圖像管理器已經和我可以請求特定的大圖像區塊(制作服務器,它真的很酷)

平鋪工作的原因是,基本上你只能將可見像素保留在內存中,並且沒有那么多。 當前不可見的所有切片都會被分解為磁盤高速緩存或閃存高速緩存。

看看Trevor Harmon的這項工作。 它改善了我的應用程序的性能。我相信它也適合你。

https://github.com/coryalder/UIImage_Resize

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM