我正在研究这种方法,因为我想将一个相当大的NSImage转换为一个较小的CGImage,以便将它分配给CALayer的内容。
从Apple's documentation我得到的是,nomRect应该是将要返回的CGImage的大小,如果我通过nil
for proposedRect,我将获得一个CGImage的大小最初的NSImage。 (如果我错了,请纠正我。)
我尝试用nil
为建议的矩形调用它并且它完美地运行,但是当我尝试给它一些像(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)
我必须对此有所了解,我理解错了。我真的希望有人能告诉我那是什么。
答案 0 :(得分:1)
此方法不适用于生成缩放图像。基本思想是在上下文中将NSImage
绘制到输入rect会产生一定的结果。这个方法会创建一个CGImage
,如果在同一个上下文中将绘制到输出矩形,它会产生相同的结果。
因此,返回CGImage
原始图像大小的方法完全有效。将CGImage
绘制到矩形时会发生缩放。
有一些关于此的文档仅在historical release notes首次引入时才存在。搜索“NSImage,CGImage和CoreGraphics阻抗匹配”。
要生成缩小的图像,您应该创建所需大小的新图像,将焦点锁定在其上,然后将原始图像绘制到该图像上。或者,如果您不知道,您可以将原始图像指定为图层的contents
,并查看其是否具有足够的效果。