你好,
我正在构建一个滚动浏览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 :(得分: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