在上篇裏面介紹了縮放NSImage的方法,幾天測試下來發現有個問題,就是在Retina屏下,發現總是比想要的尺寸大了一倍,經研究了,發現使用lockFocus方法,在Retina屏下會自動繪製兩倍的大小,挺煩人,不過有個簡單的解決方法,拿上篇的例子來說,代碼如下:
需要使用NSScreen來獲取是否是Retina,有個屬性backingScaleFactor,Retina屏下是2.
可以這樣幹:
NSImage* sourceImage = ...;
NSSize size = ...;
CGFloat scaleFactor = [NSScreen mainScreen].backingScaleFactor;
size.width = size.width / scaleFactor;
size.height = size.height / scaleFactor;
NSRect targetFrame = NSMakeRect(0, 0, size.width, size.height);
NSImage* targetImage = nil;
NSImageRep *sourceImageRep =
[sourceImage bestRepresentationForRect:targetFrame
context:nil
hints:nil];
targetImage = [[NSImage alloc] initWithSize:size];
[targetImage lockFocus];
[sourceImageRep drawInRect: targetFrame];
[targetImage unlockFocus];