为什么IK​​ImageBrowserView可以比我更快地调整图像大小?

这是我的图片大小调整代码:
CALayer *newCALayer = [[CALayer layer] retain];
NSImage* image = [[NSImage alloc] initWithData:[NSData  dataWithContentsOfFile:path]];
CGImageRef newCGImageFullResolution = [image CGImageForProposedRect:nil context:nil hints:nil];
CGContextRef context = CGBitmapContextCreate(NULL, drawRect.size.width, drawRect.size.height,
                                             CGImageGetBitsPerComponent(newCGImageFullResolution),
                                             CGImageGetBytesPerRow(newCGImageFullResolution),
                                             CGImageGetColorSpace(newCGImageFullResolution),
                                             CGImageGetAlphaInfo(newCGImageFullResolution));
CGContextDrawImage(context, CGRectMake(0, 0, drawRect.size.width, drawRect.size.height), newCGImageFullResolution);
CGImageRef scaledImage = CGBitmapContextCreateImage(context);
newCALayer.contents = (id)scaledImage;
CGImageRelease(scaledImage);
newCALayer.contentsGravity = kCAGravityResizeAspect;
newCALayer.opacity = 0.0;
newCALayer.anchorPoint = CGPointMake(0.0f,0.0f);
newCALayer.frame = CGRectMake( 0.0, 
          0.0, 
          [Singleton sharedSingleton].fullscreenRect.size.width,
          [Singleton sharedSingleton].fullscreenRect.size.height);
[newCALayer setAutoresizingMask:kCALayerWidthSizable | kCALayerHeightSizable];
//CGImageRelease(cgImageFullResolution); (bonus points if you can explain why I can't release this! I mean, I can release the scaled image ok??)
CGContextRelease(context);
[image release];
不,我正在从后台线程中做所有这些以便预加载图片,所以我的GUI感觉很快。需要一些工作才能获得同步和未设置的内容,以便CALayers最终进入视野。 但是我认为描述它的速度有多快的术语是“它是一只狗”。 与IKImageView相比 - 这个东西比我可以滚动更快地缩小图像的缩略图。 有没有人对如何更好地处理这个问题有一些建议比我现在做的更好? 换句话说,我的问题是我想要一个超级快速的用户体验。我相信实现这一目标的方法是将事情预先加载到CALayers(这可能是错的?我尝试过NSImageView和一些IK-stuff,但至少CALayer比这更好)。 /长期读者,第一次写作 - SO规则,我的意思是,你让谷歌改变它的排名...... omg! :)     
已邀请:
ImageKit可能使用
CGImageSourceCreateThumbnailAtIndex()
快速获取适合目的地的图像,而不是读取整个图像文件。     
这里:
NSImage *image = [[[NSImage alloc] initWithContentsOfFile:path] autorelease];
[image setScalesWhenResized:YES]; // *
[image setDataRetained:YES]; // *
[image setSize:desiredNewSize];
然后按原样使用图像。 至于为什么你的应用程序很慢,请在仪器下运行它。这将告诉您具体使用大部分处理器时间的位置 - 毕竟它可能不在您的缩放代码中。 *从10.6开始,这些消息没有任何用处并且已弃用,因此如果您需要Snow Leopard或更高版本,可以省略它们。     

要回复问题请先登录注册