在iPhone上加载大图像的最快方法是什么?

时间:2011-06-02 07:19:06

标签: objective-c

你好,

我正在构建一个滚动浏览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);

}

但它不起作用,非常适合加载图像。

3 个答案:

答案 0 :(得分:0)

我也面临同样的问题我选择的解决方案是我在320 * 460尺寸上调整图像尺寸,然后图像尺寸变成大约50 kb而不是那个。你也可以做同样的事情。

调整图片大小的代码: -

假设你的图像是UIImage的图像变量,新图像存储在editImage中,也就是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;
    }

答案 1 :(得分:0)

您需要进行一些内存优化。这是一个节省内存的逻辑,但你需要自己实现它。不要将所有图像添加到scrollview只添加初始5个图像。假设用户正在查看image1,现在当用户到达图像3时,他到达image3,从scrollView中删除image1,以便释放内存。并且当用户向前滚动时添加下一个图像,例如当用户在image4上添加image6时,反之亦然。当用户从image4转到image3时,从内存中删除image6。这样,内存中只有5张图像。

答案 2 :(得分: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