美文网首页
Quartz 2D 总结

Quartz 2D 总结

作者: Hollylord | 来源:发表于2015-10-10 14:38 被阅读206次

    一、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 总结

          本文链接:https://www.haomeiwen.com/subject/wrvbcttx.html