iOS边城之绘图编程(Core Graghics)

http://blog.csdn.net/victormokai/article/details/42395571


CoreGraphics.framework(uikit中已引入)  前缀名:CGXXX 参考:官方  打造自己的“美图秀秀”CoreGraphics &CoreAnimation

 

二维图形绘制引擎,我们可以使用Quartz2D来实现基本路径的绘制、透明度、描影、绘制阴影、透明层、颜色管理、反锯齿、PDF文档生成和PDF元数据访问等功能 

 

Page

Quartz 2D在图像中使用了绘画者模型(painter’s model)。每个连续的绘制操作都是将一个绘制层(a layerof ‘paint’)放置于一个画布(‘canvas’),我们通常称这个画布为(Page)。

 

Page可以是一张纸(如果输出设备是打印机),也可以是虚拟的纸张(如果输出设备是PDF文件),还可以是bitmap图像。这根据实际使用的graphicscontext而定。

 

绘制目标:GraphicsContext

一个上下文数据类型(CGContextRef),用于封装Quartz绘制图像到输出设备的信息。设备可以是PDF文件、bitmap、显示器的窗口上

获取方式

1、通过UIGraphicsGetCurrentContext函数获取当前绘图环境,一般都是在drawRect:方法中进行调用

2、创建位图Graphics Context

*iOS使用UIGraphicsBeginImageContext取代Quartz低层函数,这意味着创建的context坐标系统是使用iOS的坐标系统,而不是原来CTM的左下角坐标系统

*反锯齿 可以通过CGContextSetShouldAntialias来关闭位图Graphics Context的反锯齿效果

*通过UIGraphicsGetImageFromCurrentImageContext来获取位图数据

*然后通过UIGraphicsEndImageContext来关闭上下文

 

Quartz2D数据类型

Quartz 2d使用数据类型来创建对象,通过操作这些对象来获取图形。

  • CGPathRef:用于向量图,可创建路径,并进行填充或描画(stroke)
  • CGImageRef:用于表示bitmap图像和基于采样数据的bitmap图像遮罩。
  • CGLayerRef:用于表示可用于重复绘制(如背景)和幕后(offscreen)绘制的绘画层
  • CGPatternRef:用于重绘图
  • CGShadingRef、CGGradientRef:用于绘制渐变
  • CGFunctionRef:用于定义回调函数,该函数包含一个随机的浮点值参数。当为阴影创建渐变时使用该类型
  • CGColorRef, CGColorSpaceRef:用于告诉Quartz如何解释颜色
  • CGImageSourceRef,CGImageDestinationRef:用于在Quartz中移入移出数据
  • CGFontRef:用于绘制文本
  • CGPDFDictionaryRef, CGPDFObjectRef, CGPDFPageRef, CGPDFStream, CGPDFStringRef, and CGPDFArrayRef:用于访问PDF的元数据
  • CGPDFScannerRef, CGPDFContentStreamRef:用于解析PDF元数据
  • CGPSConverterRef:用于将PostScript转化成PDF。在iOS中不能使用。

 

Quartz2D 坐标系统

坐标系统定义是被绘制到Page上的对象的位置及大小范围。由于不同的设备有不同的图形功能,所以图像的位置及大小依赖于设备,Quartz通过使用当前转换矩阵(CTM)将一个独立的坐标系统映射到输出设备的坐标系统。CTM还有另外一个目的,就是允许你通过转换来决定对象如何被绘制。

另外,Quartz中默认的坐标系统是:沿着x轴从左到右坐标值逐渐增大;沿着y轴从下到上坐标值逐渐增大,但有一些graphics context使用了不同于Quartz的默认坐标系统。如在iOS中,由UIView返回的绘图上下文,就是使用了原点位于左上角的坐标系统

 

路径(Paths)

创建路径   CGContextBeginPath:  

绘制路径

CGContextMoveToPoint   点

CGContextAddLineToPoint   直线,在的基础上进行绘制

CGContextAddQuadCurveToPoint二次曲线,贝塞尔曲线,由多个控制点形成弧线

CGContextAddCurveToPoint三次曲线

CGContextAddEllipseInRect  椭圆

CGContextAddArc   弧,原理和二次曲线差不多

CGContextAddRect   矩形

应用路径

CGContextFillPath 填充路径

CGContextStrokePath   填充路径边框 

闭合路径

CGContexClosePath  只有没闭合的路径才需要调用此函数

填充路径

裁切路径

设置路径的属性  

颜色与颜色空间

变换

CGContextTranslateCTM 平移

CGContextRotateCTM 旋转

CGContextScaleCTM 缩放

阴影

CGContextSetShadow

Quartz 2D数据管理

 

 

绘制到位图

1、Quart2D编程中图像绘制是倒立的

上面在形变也提到,coregraphics层的原点是左下角,所以自然而然用CGContextDrawImage图像绘制的y方向也是在下边

那么如何解决:

1、使用UIImagedrawInRect方法绘制(ps,UIKit重置原点为左上角)

2、图形上下文沿着X轴旋转180度,然后向上平移适当的高度即可

//图形上下文形变,解决图片倒立的问题 

  CGContextScaleCTM(ctx, 1, -1); 

  CGContextTranslateCTM(ctx, 0, -100);//-100为图片高度 

 

绘制到PDF

UIBezierPathCAShapeLayer  使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形

可以创a建基于矢量的路径,是CGPathRef数据类型的封装


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

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

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

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值