我需要能够在图像上绘制(边框,文本注释等),然后尽快在窗口中显示它。
哪种Mac OS技术最适合此目的?在各种位图上下文,CALayer,CGLayer,Quartz,OpenGL,CoreGraphics等之间,很难知道从哪里开始。
我有一个工作代码,它采用NSImage,将其转换为CGImageRef进行处理,然后将其转换为NSImage,以便它可以在NSImageWell中显示,但它真的不快,即使是非常基本的操作。我怀疑转换为CGImage并返回没有帮助。
有关使用最新版Mac OS处理此问题的最佳方法的任何见解吗?
答案 0 :(得分:3)
我开始简单,看看它是否足够快,通过创建一个正确大小的NSImage并将焦点锁定在它上面并直接绘制到它中。 e.g:
[myImage lockFocus]; {
// draw annotations
[[NSColor redColor] set];
NSRectFill(someRect);
} [myImage unlockFocus];
Apple在过去的几个版本中花了一些时间优化NSImage,所以它值得一试,因为它很容易。
如果无法直接使用OpenGL来缓冲缓冲区,甚至SceneKit会比heck更快,但涉及60-100行代码。
我实际上不知道如何在OpenGL中做到这一点,但是有很多关于向窗口发送基本纹理的教程including this one。
SceneKit同样快,并且涉及的代码少得多,但是使用这些方法中的任何一种,您仍然需要担心创建OpenGL接受的图像缓冲区(相对简单),并且可以使用标准CGContext API进行编辑(更多码)。
如果采用这种方法,请查看CGBitmapContextCreateWithData()及其朋友。
答案 1 :(得分:1)
你真的需要修改图像本身,还是只需要制作一个自定义的NSView来绘制未经修改的图像,然后将注释放在上面?那是超级快的。