【问题标题】:Is it certain that UIGraphicsBeginImageContext use CGBitmapContextCreate to create the graphics context?确定 UIGraphicsBeginImageContext 使用 CGBitmapContextCreate 来创建图形上下文吗?
【发布时间】:2012-05-31 07:32:05
【问题描述】:

UIGraphicsBeginImageContext 是否使用 CGBitmapContextCreate 创建图形上下文 [更新: 我在文档中找不到它],所以图形上下文是否完全相同?我也尝试过进入UIGraphicsBeginImageContext,但调试器不允许我进入。

【问题讨论】:

  • 您怀疑文档吗?如果有,为什么?
  • 我的问题真的是......它是否使用CGBitmapContextCreate,如果有记录的话?

标签: ios cocoa-touch uikit core-graphics graphicscontext


【解决方案1】:

在iOS文档的UIKit Function References页面中,关于UIGraphicsBeginImageContext的内容如下:

创建一个基于位图的图形上下文并使其成为当前上下文。

添加了重点。在指向CGContextRef 页面的链接之后,我发现了这个:

图形上下文包含绘图参数和将页面上的绘画渲染到目标所需的所有设备特定信息,无论目标是应用程序中的窗口,位图图像 、PDF 文档或打印机。

再次强调。这表示(截至目前)有 4 种 Core Graphics 上下文,每种都有自己的初始化程序。与位图有关的唯一类型是基于位图的 CGContextRef,并且只有一种记录方式可以创建它们(嗯,从技术上讲,它有两个版本)。很有可能正在使用此功能。我相信UIGraphicsBeginImageContext 只是一种方便的方法。它只是为 CGBitmapContextCreate 设置了一组默认参数(它需要很多参数)并将创建的上下文推送到图形堆栈上。

【讨论】:

  • 原因是还有CGLayer图形上下文和CALayer图形上下文。 (注意CGLayerCALayer)。有的据说可以缓存在GPU上,有的不行……所以还是挺复杂的……
  • 层与上下文不同。层存储有关如何将事物渲染到上下文中的数据。如上所述,目前只有四种上下文。
  • 您可以通过CGLayerGetContext获取CGLayer的上下文
  • 我知道这一点,但您需要先创建一个带有上下文的 CGLayer,它必须是这四种中的一种。然后 CGLayer 针对这种上下文进行了优化。它主要用于屏幕外渲染(根据文档),因此使用 UIGraphicsBeginImageContext() 制作一个并没有什么意义,因为这样做的目的只是渲染一次。
  • “根据文档”?在哪里?在 Quartz 2D 编程指南中?它说它可以用于离线,但它并没有说它主要用于屏幕外。文档提到“所有图层绘图都以图形上下文开始,您可以使用函数 CGLayerCreateWithContext 从该图形上下文创建 CGLayer 对象。用于创建 CGLayer 对象的图形上下文通常是窗口图形上下文。”,所以看起来通常是对于会在屏幕上显示的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 2010-11-09
相关资源
最近更新 更多