将缩略图大小的图像添加到tableview

时间:2012-02-01 16:42:08

标签: iphone objective-c

我有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);
  }
}

2 个答案:

答案 0 :(得分:0)

基本上你遇到的问题是,当你缩小图像时,存储在内存中的字节数在缩小时不会改变。硬件仍然必须读取您的2mb图像,然后将其渲染为较小的比例。您需要做的是更改图像的大小(使用Photoshop或其他)或我建议的方式是压缩图像,然后缩小图像。图像在正常尺寸下看起来粗糙,但在将其缩小到拇指视图时看起来会很好。

生成编码为PNG的图像的NSData版本。

NSData *PNGFile = UIImagePNGRepresentation(myImage); 

或JPEG,质量值设置

NSData *JPEGFile = UIImageJPEGRepresentation(myImage, 0.9f); 

这两个图片都会为您提供比现有图像更小的图像,这将更容易在tableView中呈现。

答案 1 :(得分:0)

为了获得更好的性能,您必须在后台线程中加载图像,然后在内存中将UIImage添加到主线程上的图像视图中。有几种方法可以做到这一点,但最简单的方法是使用GCD的基于块的方法。

调整图像大小对于内存考虑仍然很重要,但首先要将异步图像加载部分放下来。

相关问题