iOS上的UIGraphicsBeginImageContext与CGBitmapContextCreate

mar*_*ram 13 iphone core-graphics uikit ios

这可能是一个非常愚蠢的问题,但有人可以告诉我使用UIGraphicsBeginImageContext创建CGContextRef和使用CGBitmapContextCreate绘制图像之间的区别吗?特别是现在因为UIKit绘图是线程安全的,我想知道是否有任何理由使用CGBitmapContextCreate而不是UIGraphicsBeginImageContext.

Tom*_*mmy 10

根据Apple的UIKit功能参考,其中包含2010年11月15日的封面日期,UIGraphicsBeginImageContext相关功能仍应仅在主线程上调用.最新的Xcode 3.2.5附带的开发人员文档中重复了相同的文本.但是,它报告了UIGraphicsGetCurrentContext我现在明确理解为线程安全的相同内容.我的理解是,只有UIGraphicsGetCurrentContextUIImage,UIColor和UIFont类现在是线程安全的而不是整个UIKit,但我无法找到明确的参考.

无论如何,UIGraphicsBeginImageContextUIKit封装器位于顶部CGBitmapContextCreate并降低其功能.特别是您只能使用具有固定组件顺序的RGBA色彩空间图像(尽管它根据iOS版本而有所不同),并且无法为绘图指定自己的目标缓冲区.因此,例如,对于一堆CoreGraphics组合,然后将结果发布到OpenGL并且无法用于将已经以某种数组形式输入到CoreGraphics中的图形进行管理,这是没用的.

但是,如果UIKit方法支持您需要的功能并且使用安全,则CoreGraphics方法没有固有的优势.

  • http://developer.apple.com/library/ios/#releasenotes/General/WhatsNewIniPhoneOS/Articles/iPhoneOS4.html#//apple_ref/doc/uid/TP40009559-SW29它在发布说明中说明绘制到图形上下文是线程安全的,你认为他们的文档只是不一致吗?我试过从调度队列调用UIGraphicsBeginImageContext,它工作正常.+1的详细解释,我认为它可能只是一个包装但不确定,再次感谢. (4认同)