我正在研究这个方法,因为我想将一个相当大的NSImage转换成一个较小的CGImage,以便将它分配给CALayer的内容。
Apple's documentation我得到,proposedect应该是将返回的CGImage的大小,如果我通过nil对于proposedect,我将得到一个CGImage,它的大小是原始NSImage的大小。(如果我错了,请纠正我。)
我试着用nil来调用这个提议的rect,它工作得很好,但是当我尝试给它一个类似(0,0,400,300)的矩形时,得到的CGImage仍然是原始图像的大小。我使用的代码如下。

var r = NSRect(x: 0, y: 0, width: 400, height: 300)
let img = NSImage(contentsOf: url)?.cgImage(forProposedRect: &r, context: nil, hints: nil)

这件事一定是我理解错了。我真的希望有人能告诉我那是什么。

最佳答案

此方法不用于生成缩放图像。基本思想是在上下文中将NSImage绘制到输入rect将产生特定的结果。这个方法创建一个CGImage这样,如果它被绘制到同一上下文中的输出rect,它将产生相同的结果。
因此,该方法返回原始图像的大小是完全有效的。当CGImage被绘制到rect时,将发生缩放。
有一些关于这一点的文献,只在第一次引入时就存在于historical release notes中。搜索“NSImage、CGImage和CoreGraphics阻抗匹配”。
要生成缩小的图像,应创建所需大小的新图像,锁定焦点并将原始图像绘制到该图像上。或者,如果您不知道,您可以将原始图像指定为层的CGImage并查看其性能是否足够。

关于swift - proposalRect在NSImage.cgImage(forProposedRect:context:hints :)中是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49588105/

10-12 03:44