Quartz 2D 总结

一、Graphics Context

      Graphics Context是一个数据类型(CGContextRef),用于封装Quartz绘制图像到输出设备的信息。设备可以是PDF文件、bitmap或者显示器的窗口上。Graphics Context中的信息包括在Page中的图像的图形绘制参数和设备相关的表现形式。

Quartz中所有的对象都是绘制到一个Graphics Context中。

我们可以简单地给Quartz绘图序列指定不同的Graphics Context,就可将相同的图像绘制到不同的设备上.

二、图形状态

Quartz通过修改当前图形状态(current graphics state)来修改绘制操作的结果。图形状态包含用于绘制程序的参数。绘制程序根据这些绘图状态来决定如何渲染结果。例如,当你调用设置填充颜色的函数时,你将改变存储在当前绘图状态中的颜色值。

可使用函数CGContextSaveGState来保存图形状态,CGContextRestoreGState来还原图形状态。注意:并不是当前绘制环境的所有方面都是图形状态的元素。如,图形状态不包含当前路径(current path)。


三、裁剪

CGContextClip 一般裁剪
使用Quartz中的Path创建操作去绘制一个菱形边框,最后使用CGContextClip函数把当前Path内部作为保留区域,path外部裁减掉。

CGContextEOClip(context); 对于上下文的path用奇偶规则裁剪:就是被偶数条线包围的区域会被填充。

四、画图

CGContextStrokePath(context); 在context上画path。

如果写了CGContextStrokePath(context);这一句,就表示这句之上的path被划到了context上面,那么这些path就不能用于其他用途了比如裁切。


五、如果要往context上面添加图片,记得先裁剪,再CGContextDrawImage。


六、关于用户坐标系的变换

//这里平移和翻转的是坐标系啊!不是里面的图片啊!!!图片的位置始终保持不变。是坐标系在变!!!
CGContextTranslateCTM(context, 0, image.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context,CGRectMake(0,0, image.size.width, image.size.height), image.CGImage);


如果以上方法不好用呢,可以用[imagedrawInRect:CGRectMake(0,0, image.size.width, image.size.height)]; 它会自适应坐标系的变换方式。

你可能感兴趣的:(Quartz 2D 总结)