如何縮放NSImage, 減少圖片的大小?(二)

在上篇裏面介紹了縮放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];

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章