2011-06-02 77 views
0

你好,在iPhone上加載大圖的最快方式是什麼?

我正在建設一個滾動視圖,通過100個房屋的圖像輕掃。 它的工作原理。但是....對於每個查看的圖像,分配的內存增加2.5 MB。最終,應用程序崩潰,因爲它的內存不足。我使用代碼解壓圖像..... - (void)解壓縮const CGImageRef cgImage = [self CGImage];

const int width = CGImageGetWidth(cgImage); 
const int height = CGImageGetHeight(cgImage); 

const CGColorSpaceRef colorspace = CGImageGetColorSpace(cgImage); 
const CGContextRef context = CGBitmapContextCreate(
                NULL, /* Where to store the data. NULL = don’t care */ 
                width, height, /* width & height */ 
                8, width * 4, /* bits per component, bytes per row */ 
                colorspace, kCGImageAlphaNoneSkipFirst); 

CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage); 
CGContextRelease(context); 

}

,但其沒有工作,非常及時採取加載圖像。

+0

什麼是圖像的尺寸? – Andrew 2011-06-02 07:21:52

+1

你爲什麼不懶惰地加載它? – 2011-06-02 07:27:54

+0

尺寸300 * 404分辨率162.99 – georgina 2011-06-02 07:34:02

回答

0

我也面臨同樣的問題我選擇的解決方案是我在320 * 460尺寸調整圖像的大小,然後圖像大小變成大約50 kb不超過。你也可以做同樣的事情。

代碼調整圖像: -

假設您在UIImage的新圖像的圖像變量存儲在editedImage這也是UIImage對象圖像。

if (self.image.size.height>460 || self.image.size.width>320) { 
     UIGraphicsBeginImageContext(CGSizeMake(320,480)); 
     [self.image drawInRect: CGRectMake(0, 0,320,480)]; 
     self.editedImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 

     NSLog(@"smallImage%f",self.editedImage.size.height); 
     NSLog(@"smallImage%f",self.editedImage.size.width); 
    } 
    else { 
     self.editedImage=self.image; 
    } 
0

你需要做一些內存優化。這是一個節省內存的邏輯,但你需要實現它自己。不要將所有圖像添加到滾動視圖,只需添加初始5張圖像。假設用戶正在查看image1,現在他在用戶到達圖像時到達image3 3從scrollView中刪除image1,以便釋放內存。並且隨着用戶向前滾動添加下一張圖像,例如當用戶在image4上時添加image6,反之亦然。當用戶從image4轉到image3時,從內存中刪除image6。這樣,只有5張圖像在內存中。

0

方式三:

1: Trying Apple's sample code called "StreetScroller", then you'll get to know how to make scrollview work definitely. 

    2:Create thumbnails for large images and save to your own directory. Then read them from url. 

3: Use UIpageviewcontroller 
相關問題