Quartz Core、Core Graphics 和 Quartz 2D 有啥区别?

Posted

技术标签:

【中文标题】Quartz Core、Core Graphics 和 Quartz 2D 有啥区别?【英文标题】:What's the difference between Quartz Core, Core Graphics and Quartz 2D?Quartz Core、Core Graphics 和 Quartz 2D 有什么区别? 【发布时间】:2010-12-25 01:55:42 【问题描述】:

我想知道是否有人可以准确地区分这些? 据我了解,Core Graphics 只是一个包含 Quartz Core 和 Quartz 2D 的“框架包”。但我不确定 Quartz 2D 是否真的是 Quartz Core?也许有人可以在那里画一些线?是什么构成了它们之间的差异?

查看文档时,我看到 Quartz Core 仅列出了所有核心动画内容。所以 Quartz Core == Core Animation?

【问题讨论】:

【参考方案1】:

来自Quartz 2D Programming Guide:

Quartz 2D API 是核心的一部分 图形框架,所以你可能会看到 Quartz 简称 Core Graphics 或者,简单地说,CG。

当提到 Mac/iPhone 上的二维绘图时,我倾向于交替使用 Quartz 和 Core Graphics,即使这在技术上并不正确。

Quartz Core framework on the iPhone 包含 Core Animation 的类和支持元素,还包含用于 Core Image 的项目。

【讨论】:

【参考方案2】:

Quartz 2D 是实现绘图的 Core Graphics 框架的 API。 Quartz Core 是一个包含动画和图像处理 API 的框架。


Quartz 框架及其 API

CoreGraphics.framework

Quartz 2D API 管理图形上下文并实现绘图。 Quartz Services API 提供对窗口服务器的低级访问。这包括显示硬件、分辨率、刷新率等。

QuartzCore.framework

Core Animation:Objective-C API 做 2D 动画。 Core Image:图像和视频处理(滤镜、变形、过渡)。ios 5

Quartz.framework仅限 OS X

Image Kit:显示和编辑图片。 PDF Kit:显示和编辑 PDF。 Quartz Composer:显示 Quartz Composer 作品。 QuickLookUI:预览媒体元素。

所有三个框架都在底层使用 OpenGL,因为 iOS 或 OS X 中的所有绘图都在某些时候通过 OpenGL。有关详细信息,请参阅 Mac OS X 技术概述的 Media Layer Frameworks 部分。

您可能听说过的其他“石英”技术:

Quartz Extreme:Quartz Composer 的 GPU 加速。 QuartzGL(又名“Quartz 2D Extreme”):用于 Quartz 2D 的 GPU 加速。

这些是 GPU 渲染的内部实现,而不是 API。他们决定是在 CPU 中创建窗口缓冲区并仅使用 OpenGL 作为纹理上传(默认)还是使用 OpenGL 进行整个渲染,not always improves performance。您可以使用QuartzGLEnable Info.plist 设置在两者之间切换。有关解释,请参阅 John Siracusa 对 Mac OS X 10.4 Tiger 的评论,页面 13 和 14。

“Quartz”和“Core”是随机散布在框架和 API 上的营销名称。如果他们想制造混乱的命名混乱,他们成功了。

【讨论】:

这里是另一篇 SO 文章以完成:***.com/a/9248627/1953914 @jano,对此评论 +1:“Quartz”和“Core”是随机散布在框架和 API 上的营销名称。如果他们想制造混乱的命名混乱,他们成功了。【参考方案3】:

但请注意,新的单视图应用程序默认链接 CoreGraphics 框架,但不链接 QuartzCore。因此,例如,如果您使用 CAEAGLLayer 执行任何操作,您可能会很快收到“未知对象”错误。

【讨论】:

是的。尤其是当您在 UIView 上使用 .layer 属性时。或者例如,要更改 corner radius 您需要导入 QuartzCore 框架。

以上是关于Quartz Core、Core Graphics 和 Quartz 2D 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Core Graphics / Quartz 2D 中绘制圆角矩形?

UIKIt UIBezierPath Core Graphics OpenGL ES Quartz2D的区别和联系

如何使用 Core Graphics 绘制点?

带有 Core Graphics 绘图的 Core Animation

绘图与滤镜全面解析--Quartz 2D Core Image

.Net Core中使用Quartz.Net