从 NSImage 获取 CGContextRef(不使用已弃用的 graphicsPort)

Getting a CGContextRef from an NSImage (without using the deprecated graphicsPort)

我想使用 CoreGraphics 绘制到 NSImage 中。我知道我可以获取图像的位图数据并创建一个新的 CGBitmapContext,绘制到它并制作一个新图像。事情是:我有一个 NSImage 并且我很懒惰 :D

以前我只做过:

[image lockFocus]; 
CGContextRef ctx = [NSGraphicsContext currentContext].graphicsPort
assert(ctx);

在 10.10 中,这已被弃用,但他们添加了不错的 属性 CGContext ......但它不适用于图像 ;)

[image lockFocus]; 
CGContextRef ctx = [NSGraphicsContext currentContext].CGContext
assert(ctx);

==> [NSSnapshotBitmapGraphicsContext CGContext]: 无法识别的选择器


这是错误还是意料之中。我的意思是..我想 NSImage 不需要由 CoreGraphics 支持..

我正在寻找一些见解:)

看起来像一个错误。将其提交给 Apple,然后继续使用已弃用的方法。

已弃用并不意味着不可用或 "don't dare use this"。这意味着应该尽可能避免在新代码中使用它,并且您应该考虑自己已收到警告,它最终可能会消失。