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值给这些函数。