调整UIImage的大小而不将其完全加载到内存中?
问题描述:
我正在开发一个应用程序,用户可能会尝试加载非常大的图像。这些图像首先显示为表格视图中的缩略图。我的原始代码会在大图像上崩溃,所以我正在重写它以首先将图像直接下载到磁盘。调整UIImage的大小而不将其完全加载到内存中?
是否有一种已知的方法来调整磁盘上的映像的大小,而不通过UIImage
将其完全加载到内存中?我目前正在尝试使用UIImage
上的类别作为详细的here来调整大小,但我的应用在试图缩小非常大的图像时崩溃(例如,this - 警告,巨大图像)。
答
你应该看看ImageIO.framework中的CGImageSource,但它只能在iOS 4.0之后才可用。
简单的例子:
-(UIImage*)resizeImageToMaxSize:(CGFloat)max path:(NSString*)path
{
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)[NSURL fileURLWithPath:path], NULL);
if (!imageSource)
return nil;
CFDictionaryRef options = (CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys:
(id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailWithTransform,
(id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailFromImageIfAbsent,
(id)@(max),
(id)kCGImageSourceThumbnailMaxPixelSize,
nil];
CGImageRef imgRef = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, options);
UIImage* scaled = [UIImage imageWithCGImage:imgRef];
CGImageRelease(imgRef);
CFRelease(imageSource);
return scaled;
}
我怎么可以添加高度和宽度的分离式价值?这是视网膜的价值?我必须为视网膜ipad屏幕选择2048或1024吗? – Raegtime 2014-10-07 08:59:12
你应该做x * [UIScreen mainScreen] .scale – 2014-12-07 10:28:43
@max在这里是什么? – 2018-02-19 11:23:27