這是我的圖像大小調整代碼:IKImageBrowserView如何以比我更快的速度調整圖像大小?
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! :)
您是否需要OS X 10.5兼容性,還是僅支持10.6? (您發佈的代碼已經需要10.6,但是有助於澄清)。 – NSGod 2011-01-31 12:51:46
只有10.6才行。應用程序商店中的兼容性點擊「重置」,不是嗎? :) – Torkel 2011-01-31 14:49:02