我有tableview
,我正在加载图像。我的图像范围从150kb到2MB。由于这对于tableview来说太多了(加载需要很长时间,并且滚动速度很慢),我想用ImageIO framework
来创建图像的缩略图。
我发现了一个执行此操作的代码,但我无法理解它。
1。)有人可以解释一下代码
2。)我的问题是,我有一个tableview,我需要加载缩略图。那么我如何使用以下代码并将其显示在我的tableview上。有人可以给我看一些示例代码或教程吗?
继承人的代码;
-(void)buildGallery
{
for (NSUInteger i = 0; i < kMaxPictures; i++)
{
NSInteger imgTag = i + 1;
NYXPictureView* v = [[NYXPictureView alloc] initWithFrame:(CGRect){.origin.x = x, .origin.y = y, .size = _thumbSize}];
NSString* imgPath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d", imgTag] ofType:@"jpg"];
CGImageSourceRef src = CGImageSourceCreateWithURL((CFURLRef)[NSURL fileURLWithPath:imgPath], NULL);
CFDictionaryRef options = (CFDictionaryRef)[[NSDictionary alloc] initWithObjectsAndKeys:(id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailWithTransform, (id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailFromImageIfAbsent, (id)[NSNumber numberWithDouble:_maxSize], (id)kCGImageSourceThumbnailMaxPixelSize, nil];
CGImageRef thumbnail = CGImageSourceCreateThumbnailAtIndex(src, 0, options); // Create scaled image
CFRelease(options);
CFRelease(src);
UIImage* img = [[UIImage alloc] initWithCGImage:thumbnail];
[v setImage:img];
[img release];
CGImageRelease(thumbnail);
}
}
答案 0 :(得分:0)
基本上你遇到的问题是,当你缩小图像时,存储在内存中的字节数在缩小时不会改变。硬件仍然必须读取您的2mb图像,然后将其渲染为较小的比例。您需要做的是更改图像的大小(使用Photoshop或其他)或我建议的方式是压缩图像,然后缩小图像。图像在正常尺寸下看起来粗糙,但在将其缩小到拇指视图时看起来会很好。
生成编码为PNG的图像的NSData版本。
NSData *PNGFile = UIImagePNGRepresentation(myImage);
或JPEG,质量值设置
NSData *JPEGFile = UIImageJPEGRepresentation(myImage, 0.9f);
这两个图片都会为您提供比现有图像更小的图像,这将更容易在tableView中呈现。
答案 1 :(得分:0)
为了获得更好的性能,您必须在后台线程中加载图像,然后在内存中将UIImage添加到主线程上的图像视图中。有几种方法可以做到这一点,但最简单的方法是使用GCD的基于块的方法。
调整图像大小对于内存考虑仍然很重要,但首先要将异步图像加载部分放下来。