quatz2D 学习 3

对于quartz来说,数据管理涉及 为quartz提供数据和获取数据。eg:从文件或者程序其他部分获取图片或pdf数据存入quartz中。从quart中获取数据,把图像或者pdf文件写入到文件

注意我们推荐使用图像I/O框架来读取和写入数据,该框架在iOS 4Mac OS X 10.4或者更高版本中可用。查看《Image I/OProgramming Guide 》可以获取更多关于CGImageSourceRefCGImageDestinationRef的信息。图像源和目标不仅提供了访问图像数据的方法,而且提供了更多访问图像原数据的方法。

Quartz可识别三种类型的数据源和目标:

l URL:通过URL指定的数据可以作为数据的提供者和接收者。我们使用Core Foundation数据类型CFURLRef作为参数传递给Quartz函数。

l CFDataCore Foundation数据类型CFDataRefCFMutableDataRef可简化Core Foundation对象的内存分配行为。CFData是一个”toll-freebridged”类,CocoaFoundation中对应的类是NSData;如果在Quartz 2D中使用Cocoa框架,你可以传递一个NSData对象给Quartz方法,以取代CFData对象。

l 原始数据:我们可以提供一个指向任何类型数据的指针,连同处理这些数据基本内存管理的回调函数集合。

这些数据,无论是URLCFData对象,还是数据缓存,都可以是图像数据或PDF数据。图像数据可以是任何格式的数据。Quartz能够解析大部分常用的图像文件格式。一些Quartz数据管理函数专门用于处理图像数据,一些只处理PDF数据,还有一些可同时处理PDF和图像数据。

URLCFData和原始数据源和目标中的数据都是在Mac OS X 或者iOS图像领域范围之外的,如图10-1所示。Mac OS XiOS的其它图像技术通常会提供它们自己的方式来和Quartz通信。例如,一个Mac OS X 应用程序可以传输一个Quartz图像给Core Image,并使用Core Image来实现更复杂的效果


传输数据给Quartz 2D

Pasted Graphic 1.tiff

10-1列出了从数据源获取数据的方法。所有的这些函数,除了CGPDFDocumentCreateWithURL,都返回一个图像源(CGImageSourceRef)或者数据提供者(CGDataProviderRef)。图像源和数据提供者抽象了数据访问工作,并避免了程序去管理原始内存缓存。图像源是将图像数据传输给Quartz的首先方式。图像源可表示很多种图像数据。一个图像源可表示多于一个图像,也可表示缩略图、图像的属性和图像文件。当我们拥有CGImageSourceRef对象后,我们可以完成如下工作:

l 使用函数CGImageSourceCreateImageAtIndex,CGImageSourceCreateThumbnailAtIndex, CGImageSourceCreateIncremental创建图像(CGImageRef). 一个CGImageRef数据类型表示一个单独的Quartz图像。

l 通过函数CGImageSourceUpdateDataCGImageSourceUpdateDataProvider来添加内容到图像源中。

l 使用函数CGImageSourceGetCount, CGImageSourceCopyPropertiesCGImageSourceCopyTypeIdentifiers获取图像源的信息。


CFPDFDocumentCreateWithURL函数可以方便地从URL指定的文件创建PDF文档。

数据提供者是比较老的机制,它有很多限制。它们可用于获取图像或PDF数据。

我们可以将数据提供者用于:

l 一个图像创建函数,如CGImageCreate,CGImageCreateWithPNGDataProvider或者CGImageCreateWithJPEGDataProvider

l PDF文档的创建函数CGPDFDocumentCreateWithProvider.

l 函数CGImageSourceUpdateDataProvider用于更新已存在的图像源。



获取Quartz 2D的数据


10-2列出地从Quartz 2D中获取数据的方法。所有这些方法,除了CGPDFContextCreateWithURL,都返回一个图像目标(CGImageDestinationRef)或者是数据消费者(CGDataComsumerRef)。图像目标和数据消费者抽象的数据写入工作,让Quartz来处理细节。


一个图像目标是获取Quartz数据的首先方法。与图像源一样,图像目标也可以表示很多图像数据,如一个单独图片、多个图片、缩略图、图像属性或者图片文件。在获取到CGImageDestinationRef后,我们可以完成以下工作: 

l 使用函数CGImageDestinationAddImage或者CGImageDestinationAddImageFromSource添加一个图像(CGImageRef)到目标中。一个CGImageRef表示一个图片。

l 使用函数CGImageDestinationSetProperties设置属性

l 使用函数CGImageDestinationCopyTypeIdentifiersCGImageDestinationGetTypeID从图像目标中获取信息。


函数CGPDFContextCreateWithURL可以方便地将PDF数据写入URL指定的位置。


数据消费者是一种老的机制,有很多限制。它们用于写图像或PDF数据。我们可以将数据消费者用于:

l PDF上下文创建函数CGPDFContextCreate。该函数返回一个图形上下文,用于记录一系列的PDF绘制命令。

l 函数CGImageDestinationCreateWithDataConsumer,用于从数据消费者中创建图像目标。


关于图像的更多信息,可查看Bitmap Images andImage Masks



图片:Figure 10-1  Moving data to and from Quartz 2D in Mac OS X.png 



图片:Table 10-2  Functions that move data out of Quartz 2D.png 






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值