在Mac OS上优化2D图像绘制代码

时间:2014-01-12 20:14:00

标签: macos cocoa opengl core-graphics quartz-graphics

我需要能够在图像上绘制(边框,文本注释等),然后尽快在窗口中显示它。

哪种Mac OS技术最适合此目的?在各种位图上下文,CALayer,CGLayer,Quartz,OpenGL,CoreGraphics等之间,很难知道从哪里开始。

我有一个工作代码,它采用NSImage,将其转换为CGImageRef进行处理,然后将其转换为NSImage,以便它可以在NSImageWell中显示,但它真的不快,即使是非常基本的操作。我怀疑转换为CGImage并返回没有帮助。

有关使用最新版Mac OS处理此问题的最佳方法的任何见解吗?

2 个答案:

答案 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来绘制未经修改的图像,然后将注释放在上面?那是超级快的。