【发布时间】:2011-03-27 08:00:14
【问题描述】:
我想加载并显示具有大尺寸的图像(.jpg,.png),例如1800x1200 或 2000x1800(宽 x 高)。 如果我在 UIImageView 中显示如此大尺寸的图像(1800x1200 或 2000x1800),它也会消耗大量内存并且应用程序会崩溃。 此外,根据 Apple 的文档 (http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIImage_Class/Reference/Reference.html),我们应该避免创建尺寸大于 1024 x 1024 的 UIImage 对象。 一种解决方案是调整图像大小。我已使用以下代码应用逻辑来调整图像大小。
UIGraphicsBeginImageContext( newSize );
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
这可以正常工作并调整图像大小。但是当它在设备上下文中加载大图像以调整大小时,它会在一秒钟内消耗大量内存,因此应用程序正在崩溃。 所以这种方法行不通。如果您有更好的方法来调整大小而不会崩溃,请分享。
同样在这个 (http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIImage_Class/Reference/Reference.html) 链接中,Apple 表示
“您应该避免创建尺寸大于 1024 x 1024 的 UIImage 对象。除了这样的图像会消耗大量内存之外,在 OpenGL ES 中将图像用作纹理或在绘图时可能会遇到问题图像到视图或图层。如果您正在执行基于代码的操作,例如通过将图像绘制到支持位图的图形上下文来调整大于 1024 x 1024 像素的图像大小,则此大小限制不适用。事实上,您可以需要以这种方式调整图像的大小(或将其分成几个较小的图像)才能将其绘制到您的一个视图中。”。
有人可以详细说明"This size restriction does not apply if you are performing code-based manipulations, such as resizing an image larger than 1024 x 1024 pixels by drawing it to a bitmap-backed graphics context." 吗?如何在位图支持的图形上下文上绘制图像?什么是位图支持的图形上下文?如果有人可以共享示例代码,那将对我有所帮助。
提前致谢!!
【问题讨论】:
标签: iphone crash uiimage memory-management