因此,在进行一些研究时,我意识到这与 Retina 显示器有关。我猜锁定焦点将始终绘制最好的表示,如果在计算机的任何位置连接了视网膜显示器,它将根据该比例因子进行渲染。因此,为了让它保持适当的尺寸和 DPI,我创建了一个迭代所有屏幕并返回最大 backingScaleFactor 的方法
func maximumScaleFactor(screen: NSScreen) -> CGFloat {
var max: CGFloat = 0
for s in NSScreen.screens()! {
if s.backingScaleFactor > max { max = s.backingScaleFactor }
}
return max / screen.backingScaleFactor
}
然后对于'NSImage'我做了以下
-(NSImage*)addTarget:(NSImage*)image
let scale = self.maximumScaleFactor(currentScreen)
let originalSize = image.size
//cut the image size in half
var size = image.size
size.x /= scale
size.y /= scale
image.lockFocus()
//do whatever drawing you need here
image.unlockFocus()
//set the image back to its original size
image.size = originalSize
return image
}
到目前为止,这对我来说效果很好,并且图像质量在我看来主观上是一样的。