版本记录
版本号 | 时间 |
---|---|
V1.0 | 2018.09.06 |
前言
Quartz 2D
框架相信大家都知道,也都一直在使用。Quartz 2D
的API是纯C语言的,它是一个二维绘图引擎,同时支持iOS和Mac系统。Quartz 2D
的API来自于Core Graphics
框架,数据类型和函数基本都以CG作为前缀,接下来几篇我们就一起来看一下这个框架。感兴趣可以看上面几篇文章。
1. Quartz 2D编程指南 (一) —— 简介(一)
2. Quartz 2D编程指南 (二) —— Quartz 2D概览(二)
3. Quartz 2D编程指南 (三) —— 图形上下文(三)
4. Quartz 2D编程指南 (四) —— Paths路径(一)
5. Quartz 2D编程指南 (五) —— Paths路径(二)
6. Quartz 2D编程指南 (六) —— 颜色和颜色空间(一)
7. Quartz 2D编程指南 (七) —— 变换(一)
8. Quartz 2D编程指南 (八) —— Patterns图案样式(一)
9. Quartz 2D编程指南 (九) —— 阴影(一)
10. Quartz 2D编程指南 (十) —— 渐变(一)
11. Quartz 2D编程指南 (十一) —— 透明层(一)
Data Management in Quartz 2D - Quartz 2D中的数据管理
管理数据是每个图形应用程序需要执行的任务。对于Quartz,数据管理是指向Quartz 2D例程提供数据或从Quartz 2D例程接收数据。一些Quartz 2D例程将数据移动到Quartz中,例如从文件或应用程序的其他部分获取图像或PDF数据的那些。其他例程接受Quartz数据,例如将图像或PDF数据写入文件或将数据提供给应用程序的其他部分的数据。
Quartz提供了各种用于管理数据的函数。通过阅读本章,您应该能够确定哪种函数最适合您的应用。
注意:读取和写入图像数据的首选方法是使用
Image I / O
框架,该框架可在iOS 4
和Mac OS X 10.4
及更高版本中使用。有关CGImageSourceRef和CGImageDestinationRef不透明数据类型的更多信息,请参见Image I/O Programming Guide。图像源和目标不仅提供对图像数据的访问,还为访问图像元数据提供更好的支持。
Quartz认可三大类数据源和目的地:
-
URL
。可以将其位置指定为URL的数据可以充当数据的供应者或接收者。使用Core Foundation
数据类型CFURLRef将URL传递给Quartz函数。 -
CFData
。Core Foundation
数据类型CFDataRef和CFMutableDataRef是允许简单分配的缓冲区采用Core Foundation对象行为的数据对象。 CFData与其Cocoa Foundation
对应的NSData
类是“自由桥接”;如果你在Cocoa框架中使用Quartz 2D,你可以将NSData对象传递给任何带有CFData
对象的Quartz函数。 -
Raw data
。您可以提供指向任何类型数据的指针以及一组负责数据基本内存管理的回调。
无论是由URL,CFData对象还是数据缓冲区表示的数据本身都可以是图像数据或PDF数据。图像数据可以使用任何类型的文件格式。 Quartz了解大多数常见的图像文件格式。一些Quartz数据管理功能专门用于图像数据,一些仅用于PDF数据,而另一些则更通用,可用于PDF或图像数据。
URL
,CFData
和原始数据源和目标是指Mac OS X或iOS图形技术领域之外的数据,如图10-1所示。 Mac OS X或iOS中的其他图形技术通常提供与Quartz通信的自己的例程。例如,Mac OS X应用程序可以将Quartz图像发送到Core Image,并使用它来改变具有复杂效果的图像。
Moving Data into Quartz 2D - 将数据移动到Quartz 2D中
表10-1列出了从数据源获取数据的函数。除了CGPDFDocumentCreateWithURL之外,所有这些函数都返回图像源(CGImageSourceRef)
或数据提供者(CGDataProviderRef)
。图像源和数据提供程序抽象数据访问任务,并消除了应用程序通过原始内存缓冲区管理数据的需要。
图像源是将图像数据移动到Quartz的首选方式。图像源表示各种各样的图像数据。图像源可以包含多个图像,缩略图图像以及每个图像和图像文件的属性。拥有CGImageSourceRef
后,您可以完成以下任务:
- 使用CGImageSourceCreateImageAtIndex,CGImageSourceCreateThumbnailAtIndex或CGImageSourceCreateIncremental函数创建图像(CGImageRef)。
CGImageRef
数据类型表示单个Quartz图像。 - 使用CGImageSourceUpdateData或CGImageSourceUpdateDataProvider函数将内容添加到图像源。
- 使用函数CGImageSourceGetCount,
CGImageSourceCopyProperties
和CGImageSourceCopyTypeIdentifiers从图像源获取信息。
函数CGPDFDocumentCreateWithURL是一个便捷函数,它从位于指定URL的文件创建PDF文档。
数据提供程序是一种功能有限的旧机制。它们可用于获取图像或PDF数据。
您可以提供数据提供者:
- 图像创建函数,例如CGImageCreate,CGImageCreateWithPNGDataProvider或CGImageCreateWithJPEGDataProvider。
- PDF文档创建函数CGPDFDocumentCreateWithProvider。
- CGImageSourceUpdateDataProvider函数用于使用新数据更新现有图像源。
有关图像的更多信息,请参阅Bitmap Images and Image Masks。
Table 10-1 Functions that move data into Quartz 2D
Function | Use this function |
---|---|
CGImageSourceCreateWithDataProvider | To create an image source from a data provider. |
CGImageSourceCreateWithData | To create an image source from a CFData object. |
CGImageSourceCreateWithURL | To create an image source from a URL that specifies the location of image data. |
CGPDFDocumentCreateWithURL | To create a PDF document from data that resides at the specified URL. |
CGDataProviderCreateSequential | To read image or PDF data in a stream. You supply callbacks to handle the data. |
CGDataProviderCreateDirectAccess | To read image or PDF data in a block. You supply callbacks to handle the data. |
CGDataProviderCreateWithData | To read a buffer of image or PDF data supplied by your application. You provide a callback to release the memory you allocated for the data. |
CGDataProviderCreateWithURL | Whenever you can supply a URL that specifies the target for data access to image or PDF data. |
CGDataProviderCreateWithCFData | To read image or PDF data from a CFData object. |
Moving Data out of Quartz 2D - 将数据移出Quartz 2D
表10-2中列出的函数将数据移出Quartz 2D
。除CGPDFContextCreateWithURL外,所有这些函数都返回图像目标(CGImageDestinationRef)或数据使用者(CGDataConsumerRef)。图像目标和数据使用者抽象数据写入任务,让Quartz为您处理细节。
图像目标是将图像数据移出Quartz的首选方法。与图像源类似,图像目的地可以表示各种图像数据,从单个图像到包含多个图像的目的地,缩略图图像以及每个图像或图像文件的属性。拥有CGImageDestinationRef后,您可以完成以下任务:
- 使用CGImageDestinationAddImage或CGImageDestinationAddImageFromSource函数将图像(CGImageRef)添加到目标。
CGImageRef
数据类型表示单个Quartz图像。 - 使用函数CGImageDestinationSetProperties设置属性。
- 使用CGImageDestinationCopyTypeIdentifiers或CGImageDestinationGetTypeID函数从图像目标获取信息。
函数CGPDFContextCreateWithURL是一种便捷函数,它将PDF数据写入URL指定的位置。
数据使用者是一种功能有限的旧机制。它们用于写入图像或PDF数据。您可以将数据使用者提供给:
- PDF上下文创建函数CGPDFContextCreate。此函数返回一个图形上下文,该图形上下文将绘图记录为一系列传递给数据使用者对象的PDF绘图命令。
- 函数CGImageDestinationCreateWithDataConsumer用于从数据使用者创建图像目标。
注意:为了在处理原始图像数据时获得最佳性能,请使用
vImage
框架。 您可以使用vImageBuffer_InitWithCGImage
函数从CGImageRef
引用将图像数据导入vImage
。 有关详细信息,请参阅Accelerate Release Notes。
有关图像的更多信息,请参阅Bitmap Images and Image Masks。
Table 10-2 Functions that move data out of Quartz 2D
Function
Function | Use this function |
---|---|
CGImageDestinationCreateWithDataConsumer | To write image data to a data consumer. |
CGImageDestinationCreateWithData | To write image data to a CFData object. |
CGImageDestinationCreateWithURL | Whenever you can supply a URL that specifies where to write the image data. |
CGPDFContextCreateWithURL | Whenever you can supply a URL that specifies where to write PDF data. |
CGDataConsumerCreateWithURL | Whenever you can supply a URL that specifies where to write the image or PDF data. |
CGDataConsumerCreateWithCFData | To write image or PDF data to a CFData object. |
CGDataConsumerCreate | To write image or PDF data using callbacks you supply. |
Moving Data Between Quartz 2D and Core Image in Mac OS X - 在Mac OS X中在Quartz 2D和Core Image之间移动数据
Core Image
框架是Mac OS X
中提供的支持图像处理的Objective-C API。 Core Image允许您访问视频和静态图像的内置图像过滤器,并提供对自定义过滤器和近实时处理的支持。您可以将Core Image
滤镜应用于Quartz 2D
图像。例如,您可以使用Core Image来校正颜色,扭曲图像的几何形状,模糊或锐化图像,以及在图像之间创建过渡。 Core Image还允许您将迭代过程应用于图像,该图像将过滤操作的输出反馈给输入。要更全面地了解Core Image的功能,请参阅Core Image Programming Guide。
Core Image方法对打包为Core Image图像或CIImage对象的图像进行操作。 Core Image不能直接在Quartz图像上运行(CGImageRef
数据类型)。在将Core Image滤镜应用于图像之前,必须将Quartz图像转换为Core Image图像。
Quartz 2D API
不提供将Quartz图像打包为Core Image图像的任何函数,但Core Image可以。以下Core Image方法从Quartz图像或Quartz图层(CGLayerRef)
创建Core Image图像。您可以使用它们将Quartz 2D数据移动到Core Image。
- imageWithCGImage:
- imageWithCGImage:options:
- imageWithCGLayer:
- imageWithCGLayer:options:
以下Core Image方法从Core Image图像返回Quartz图像。 您可以使用它们将处理后的图像移回Quartz 2D:
- createCGImage:fromRect:
- createCGLayerWithSize:info:
有关Core Image方法的完整说明,请参阅Core Image Reference Collection。
后记
本篇主要讲述了数据管理,感兴趣给个赞或者关注下~~