我正在研究这个方法,因为我希望将相当大的NSImage转换为较小的CGImage,以便将其分配给CALayer的内容。
从苹果的文档中我得到,proposedRect应该是将返回的CGImage的大小,如果将nil作为proposedRect,我将得到一个与原始NSImage大小相同的CGImage。(如果我错了,请纠正我。)
我试着用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)关于这件事我一定理解错了。我真的希望有人能告诉我那是什么。
发布于 2018-03-31 15:27:28
此方法不用于生成缩放图像。其基本思想是,将NSImage绘制到上下文中的输入rect将产生一定的结果。这个方法创建了一个CGImage,如果它在相同的上下文中被绘制为到输出,那么它将产生相同的结果。
因此,该方法返回与原始图像大小相同的CGImage是完全有效的。当将该CGImage绘制到rect时,就会发生缩放。
有关这一点的一些文档只存在于历史发行说明首次引入时。搜索"NSImage,CGImage和CoreGraphics阻抗匹配“。
要生成一个缩小的图像,您应该创建一个新的图像大小,锁定它的焦点,并绘制原始图像到它。或者,如果你不知道,你可以把你的原始图像指定为图层的contents,看看它是否有足够的性能。
https://stackoverflow.com/questions/49588105
复制相似问题