Quartz 2D编程指南(1) - 概览
Overview of Quartz 2D
在须要的时候,Quartz 2D还能够借助于图形硬件的功能。
比如,通过使用QuickTime的GraphicsImportCreateCGImage函数,能够用Quartz 2D从一个QuickTime图形导入器中创建一个图像。
我们通常称这个画布为Page.Page上的画图可以通过额外的绘制操作来叠加很多其它的画图。Page上的图像对象仅仅可以通过叠加很多其它的图形来改变。
这个模型同意我们使用小的图元来构建复杂的图形。
CGContextRef),用于封装Quartz绘制图像到输出设备的信息。设备能够是PDF文件,bitmap或者显示器窗体上。Graphics Context中的信息包含在Page中的图像的图形绘制參数和设备相关的表现形式。Quartz中的全部对象都是绘制到一个Graphics Context中。
CGLayerRef): PostScript
graphics context:当你想绘制到 Mac OS X上,你将使内容显示到PostScript graphics context上。很多其它详情: Obtaining
a Graphics Context for PrintingCGImageRef,
基于提供的相关数据显示位图和位图掩图.See Bitmap
Images and Image Masks.CGLayerRef,
用于显示绘制的layer,而且layer可以被反复绘制(such as for backgrounds or patterns)和离屏渲染. See Core
Graphics Layer DrawingCGPatternRef,
用于反复绘制. See Patterns.CGShadingRef and CGGradientRef,用于绘制渐变.
See Gradients.CGFunctionRef,
用于定义回调函数。该函数包括一个随机的浮点数,使用这样的数据类型当创建渐变阴影效果. See Gradients.CGColorRef and CGColorSpaceRef,用于通知Quartz理解相应的颜色.
See Color
and Color Spaces.CGImageSourceRef and CGImageDestinationRef,
用于在Quartz中移入移出数据. See Data
Management in Quartz 2D and Image
I/O Programming Guide. CGPDFDictionaryRef, CGPDFObjectRef, CGPDFPageRef, CGPDFStream, CGPDFStringRef,
and CGPDFArrayRef,
提供PDF元数据. See PDF
Document Creation, Viewing, and Transforming.CGPDFScannerRef and CGPDFContentStreamRef,解析PDF元数据.
See PDF
Document Parsing.CGPSConverterRef, 用于转换PostScript成为PDF,在iOS中不可以使用. See PostScript
Conversion.绘制程序依据这些画图状态来决定怎样渲染结果。比如:当你调用设置填充颜色的函数时。你将改变存储在当前画图状态的颜色值。
当保存图像状态时,Quartz将当前图形形态的一个副本压入栈中。
当还原图形状态是,Quartz将栈顶的图形状态出栈。
出栈的状态为当前图形状态。
我们在用户空间坐标系统(user-space coordination system,简称用户空间)中指定图形的位置及大小。坐标值是用浮点数来定义的。
比如,一个显示设备可能每英寸仅仅能显示少于96个像素,而打印机可能每英寸能显示300个像素。
假设在设备级别上定义坐标系统。则在一个设备上绘制的图形无法在其他设备上正常显示。
Quartz中默认的坐标系统是:沿着x轴从左到右坐标值逐渐增大;沿着y轴从下到上坐标值逐渐增大。
相对于Quartz来说。这些坐标系统是改动的坐标系统(modified coordinate system),当在这些坐标系统中显示Quartz绘制的图形时。必须进行转换。
最常见的一种改动的坐标系统是原点位于左上角。而沿着y轴从上到下坐标值逐渐增大。我们能够在例如以下一些地方见到这样的坐标系统:
要达到这一目的,仅仅须要对PDF的上下文的原点做一个平移(移到左上角)和用-1对y坐标值进行缩放。图1-5显示了这样的变换操作:
在IOS中,假设使用UIImage对象来包裹创建的CGImage对象。能够不须要改动CTM。
UIImage将自己主动进行补偿以适用UIKit的坐标系统。
在iOS3.2和之后版本号中,当UIKit为你的应用程序创建画图上下文时。也对上下文进行了额外的改动以匹配UIkit的约定。
特别是patterns和shadows不被CTM影响,须要单独调整来匹配UIkit坐标系。在这样的情况下,没有一个等价的机制让CTM来转换Quartz和UIkit上下文。必须了解到在什么样的上下文中进行绘制,就须要匹配相预期的上下文。
所以。对象的创建与销毁与通常的方式是一样的。在Quartz中。须要记住例如以下一些规则:
通常,假设使用含有”Create”或“Copy”单词的函数获取一个对象。当使用完后必须释放,否则将导致内存泄露。
相同,能够使用Core Foundation的CFRetain和CFRelease。可是注意不能传递NULL值给这些函数。

浙公网安备 33010602011771号