Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将缩略图大小的图像添加到tableview_Iphone_Objective C - Fatal编程技术网

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

Iphone 将缩略图大小的图像添加到tableview,iphone,objective-c,Iphone,Objective C,我有一个tableview,我正在向其中加载图像。我有150kb到2MB的图像。由于这对于tableview来说太多,加载时间太长,并且滚动速度很慢,所以我考虑使用ImageIO框架来创建图像的缩略图 我找到了一个代码,但我无法理解它 一,。谁能给我解释一下密码吗 二,。我的问题是,我有一个tableview,我需要加载缩略图到它。那么如何使用下面的代码并将其显示在tableview上呢。有人能给我看一些示例代码或教程吗 这是代码 -(void)buildGallery { for (NSU

我有一个tableview,我正在向其中加载图像。我有150kb到2MB的图像。由于这对于tableview来说太多,加载时间太长,并且滚动速度很慢,所以我考虑使用ImageIO框架来创建图像的缩略图

我找到了一个代码,但我无法理解它

一,。谁能给我解释一下密码吗

二,。我的问题是,我有一个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);
  }
}

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

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

NSData *PNGFile = UIImagePNGRepresentation(myImage); 
或设置了质量值的JPEG

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

这两种方法都将为您提供一个比当前更小的图像,这将更容易在tableView中渲染。

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


考虑到内存问题,调整映像的大小仍然很重要,但首先要放下异步映像加载部分。

我无法控制此映像。它将始终是2MB。我读过ImageIO.framework有帮助,但不知道如何使用它Marc是正确的,使用不同的线程块,GCD。。。如果无法控制图像大小,则加载图像。然后用我上面的方法。