1、图像处理介绍
iOS提供了一系列的图形图像技术,这是建立动人的视觉体验的基础。特定的框架处理2D,3D和动画效果,能够让您的程序访问iPhone和iPod touch卓越的图形功能。在图像渲染里,GPU的好坏一定程度上决定的图像渲染的能力。
(1)iOS图像处理:
(2)Quartz 2D核心概念
上下文:主要用于描述图形写入哪里,该过程由CGContextRef类定义,通常可以写入UIView或者内存
位图。在操作图形过程中,图层(layer)绘图的工作区域可以相互重叠,构建非常复杂的图形,比如在word、 ppt等编辑工具中出现的图层概念是一样的,但是在iPhone开发过程中,一般只需要关心单图层。
路径:是在图层上绘制的内容,可以是一个点、线、圆、矩形等也可以是一幅图像,还可以在图形中填充内容,比如喷 漆、背景等功能。
状态:用于保存配置变换的值、填充和轮廓、alpha值等,在iOS中使用CGContextSaveState类存储状态,使用
CGContextRestoreGState类回复当前状态,通过这种方式可以在复杂的绘制程序中实现轻松切换。
图形上下文的处理:在Stack上创建,当新建一个图形设备上下文时,它将被压入Stack的顶部,使用完成后,它会从
Stack的顶部弹出;这表明,如果创建新的图形设备上下文,它将放在现有的图形设备上下文的上
面,直到使用完成后才会被释放。
图形上下文处理的相关函数:UIGraphicGetCurrentContext 返回当前上下文,通常指当前UIKit对象的上下文
UIGraphicBeginImageContext 创建位图设备上下文 参数为CGSize
UIGraphicEndImageContext 从Stack中弹出一个位图设备上下文
CGPDFContextCreate 创建PDF上下文 参数为:CGDataConsumerRef, CGRect,CGDictionaryRef
UIGraphicGetImageFromCurrentImageContext 返回一个UIImage的位图,仅适用于位图上下文
2、在上下文中绘图
(1)绘制路径
相关函数
设置线条宽度
-(void)CGContextSetLineWidth(CGContextRef c,CGFloat width);
设置画笔颜色
-(void)CGContextSetStrokeColorWithColor(CGContextRef c,CGColorRef color);
设置背景填充颜色
-(void)CGContextSetFillColorWithColor(CGContextRef c,CGColorRef color);
绘制线条
-(void)CGContextAddLineToPoint(CGContextRef c,CGFloat x,CGFloat y);
绘制圆
-(void)CGContextAddEllipseInRect(CGContextRef context,CGRect rect);
绘制矩形
-(void)CGContextAddRect(CGContextRef c,CGRect rect);
(2)绘制图片
有两种方法:
一种是用底层的渲染,UIImage方法实现
//在指定的位置绘图
-(void)drawAtPoint:(CGPoint)point;
//在指定区域绘图
-(void)drawInRect:(CGRect)rect;
另一种是在UIKit框架里面完成一些顶端的设置,例如用Quartz 2D绘制
-(void)CGContextDrawImage(CGContextRef c,CGRect rect,CGImageRef image);
(因两种方法坐标系不同,所以Quartz 2D绘制出的图形是倒置的,需要调用CGContextTranslateCTM和CGContextScaleCTM来设置坐标原点和显示比例)
(3)绘制文字
一种方法是:在屏幕上特定的位置以指定的字体绘制单行的文本
-(CGSize)drawAtPoint:(CGPoint)point withFont:(UIFont *)font;
-(CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font;
另一种方法是Quartz 2D文字绘制
//选择绘制的字体
-(void)CGContextSelectFont(CGContextRef context,const char*name,CGFloat size,CGTextEncoding textEncoding);
//设置文字的绘制方式
-(void)CGContextSetTextDrawingMode(CGContextRef c,CGTextDrawingMode mode)
//第二个参数代表绘制的模式,可以为kCGTextFill(填充)kCGTextStroke(描边)或kCGTextFillStroke(即填充又描边)
//设置文字变换矩阵
-(void)CGContextShowTextAtPoint(CGContextRef c,CGFloat x,CGFloat y,const char*string,size_t length);
下一篇以例子来说明。