【IOS 开发学习总结-OC-67】Quartz 2D绘图(4-4)——图形变换+填充处理+core image 滤镜

原创 2015年10月23日 16:49:01

【IOS 开发学习总结-OC-67】Quartz 2D绘图(4-4)——图形变换+填充处理+core image 滤镜

Quartz 2D提供了坐标变换支持,这样开发的时候 我们不许繁琐计算每个点坐标,只需对坐标系统整体变换即可。

使用坐标变换

Quartz 2D坐标变换的方法:
1. CGContextTranslateCTM(<#CGContextRef _Nullable c#>, <#CGFloat tx#>, <#CGFloat ty#>)——平移坐标系统;
2. CGContextScaleCTM(<#CGContextRef _Nullable c#>, <#CGFloat sx#>, <#CGFloat sy#>)——缩放坐标系统;
3. CGContextRotateCTM(<#CGContextRef _Nullable c#>, <#CGFloat angle#>)——旋转坐标系统

保存,恢复绘图状态的方法——进行坐标转换的时候无需计算多次坐标变换后的累加结果

  1. CGContextSaveGState(<#CGContextRef _Nullable c#>)——保存之前的绘图状态;
  2. CGContextRestoreGState(<#CGContextRef _Nullable c#>)——恢复之前保存的绘图状态;
    CGContextSaveGState(<#CGContextRef _Nullable c#>)函数保存的绘图状态,不仅包括当前坐标系统的状态,还包括当前设置的填充风格,线条风格,阴影风格等各种绘图状态;但它不会保存当前绘制的图形。

坐标变换与路径结合使用

如果在坐标变换以后的坐标系统内创建路径,那么创建路径的每个点的坐标也是变换后 的结果。——整个路径都是基于”坐标变换”后的坐标系统。

使用矩阵变换

  1. CGContextConcatCTM(<#CGContextRef _Nullable c#>, <#CGAffineTransform transform#>)——使用 transform 变换矩阵对CGContextRef坐标系统进行变换,通过坐标矩阵可以对坐标系统任意变换。
  2. CGContextGetCTM(<#CGContextRef _Nullable c#>)——获取CGContextRef坐标系统的变换矩阵;
    矩阵变换这部分内容网络上没有发现比较系统的讲解。个人推荐使用《疯狂 ios 》中相应的章节学习。

控制绘图的叠加模式

可以调用Quartz 2D提供的方法:
CGContextSetBlendMode(<#CGContextRef _Nullable c#>, <#CGBlendMode mode#>)——设置该CGContextRef绘图环境的叠加模式;

处理填充

渐变填充

  1. CGContextDrawLinearGradient(<#CGContextRef _Nullable c#>, <#CGGradientRef _Nullable gradient#>, <#CGPoint startPoint#>, <#CGPoint endPoint#>, <#CGGradientDrawingOptions options#>)——设置渐变填充。Gradient,渐变对象;options支持kCGGradientDrawsAfterEndLocation(扩展填充起始点之前的区域)或kCGGradientDrawsBeforeStartLocation(扩展填充结束点之后的区域)
  2. CGContextDrawRadialGradient(<#CGContextRef _Nullable c#>, <#CGGradientRef _Nullable gradient#>, <#CGPoint startCenter#>, <#CGFloat startRadius#>, <#CGPoint endCenter#>, <#CGFloat endRadius#>, <#CGGradientDrawingOptions options#>)——圆形渐变填充。

上面的函数中都用到CGGradientRef参数,代表渐变颜色,为了获取CGGradientRef,可用如下函数:

CGGradientCreateWithColorComponents(<#CGColorSpaceRef _Nullable space#>, <#const CGFloat * _Nullable components#>, <#const CGFloat * _Nullable locations#>, <#size_t count#>)`
——space:指定该渐变的颜色空间;components,根据不同的颜色空间,设置多种颜色;locations:指定各颜色点的分布位置(如果为 NULL, 各颜色点均匀分布);count,颜色数量。

这里写图片描述

模式填充

类似于铺瓷砖的方式填充。
这里写图片描述
还可以在使用模式填充时,指定瓷砖块之间的距离;也可对填充的瓷砖块使用旋转,缩放,镜像等各种变换。

执行模式填充的2种方式:

  1. 使用CGColorCreateWithPattern(<#CGColorSpaceRef _Nullable space#>, <#CGPatternRef _Nullable pattern#>, <#const CGFloat * _Nullable components#>)函数创建代表模式填充的 CGColorRef(颜色),接下来使用该颜色填充指定区域或绘制边框;
  2. 先创建CGColorRef(模式填充的引用),然后在绘制时调用CGContextSetFillPattern函数或者CGContextStrokePath函数设置填充或者绘制边框的模式;

创建代表填充的颜色

CGColorRef代表一种具体的颜色,但此处它是一种特殊的颜色——代表模式填充的颜色。获取了这种颜色后,程序就可以使用它来填充区域,绘制路径。
这里写图片描述

使用 CGPatternRef设置模式填充

这里写图片描述

core image 滤镜

core image 可以用来开发移动版的 Photoshop.
core imaged的3个核心 API:
1. CIContext:——核心 API,所有的图片的处理都在它的管理下完成。
2. CIFiter:——代表过滤器。创建CIFiter时传入不同的参数即可创建不同类型的过滤器。
3. CIImage:——代表过滤器处理的图片。程序可以通过 UIImage,图片文件或像素数据来创建 CIImage.

在使用core image过滤器之前,一定要为项目增加core image框架。使用core image过滤的步骤如下:
这里写图片描述
这里写图片描述
这里写图片描述

补充学习资料:
1. iOS动效-利用CATransform3D实现翻页动画效果:http://www.jianshu.com/p/9cbf52eb39dd
2. http://blog.csdn.net/lvmaker/article/details/38385823

版权声明:本文为博主原创文章,转载注明出处!

相关文章推荐

【IOS 开发学习总结-OC-64】Quartz 2D绘图(4-1)——Quartz 2D绘图基础+点线模式

【IOS 开发学习总结-OC-64】Quartz 2D绘图(上)——Quartz 2D绘图基础+点线模式Quartz 2D绘图的核心API是CGContextRef,该API专门用于绘制各种图形。Qu...

iOS开发 基本绘图/Quartz 2D/Core Image

概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架。今天我们将围绕iOS中两大图形、图像绘图框架进行介绍:Quartz 2D绘制2D图形...

iOS 开发 Quartz 2D+ UIBezierPath绘图大全详解

Quartz 2D 使用大全结构图UIKIt UIBezierPath Core Graphics OpenGL ES Quartz2D的区别和联系UIKIt:UIKit中的控件都是基于Core Gr...

【IOS 开发学习总结-OC-4】objective-c 运算符

运算符是用于数据运算,赋值和比较等的特殊符号。 objective-c 语言中的运算符有以下几种: 算术运算符 赋值运算符 比较运算符 逻辑运算符 位运算符 类型相关运算符 算术运算符有7个基本运算...

iOS 图形处理 Core Graphics Quartz2D 教程

Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎。它提供了低级别、轻量级、高保真度的2D渲染。该框架可以用于基于路径的绘图、变换、颜色管理、脱屏渲...

iOS开发-Quartz2D上下文栈的操作&详细分析绘图本质(图形上下文栈)

1.关于图形上下文栈的操作 •将当前的上下文copy一份,保存到栈顶(那个栈叫做”图形上下文栈”) void CGContextSaveGState(CGContextRef c) •将栈...

【IOS 开发学习总结-OC-22】★objective-c——使用@try 处理异常

objective-c 的异常机制通常只作为一种程序调试,捕捉机制。 我们先来测试下OC的异常机制。示例程序: FKEatable.h#import // 定义协议 @protocol FKEat...

iOS学习阶段总结-b20120920-Quartz 2D绘图

logo项目中函数解释: UIGraphicsBeginImageContext:创建一个基于UIImage的图形上下文,图形上下文可以是UIView,UIImage和PDF文件; UIGra...

iOS开发学习之Quartz2D绘图

转载自:http://www.cnblogs.com/letougaozao/p/3672672.html Quartz2D的简介使用简介绘制图像坐标系的平移、旋转、缩放...

Quartz2D绘图<四>图形填充

1,举行的填充 CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);//设置填充颜色 CGContextFi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【IOS 开发学习总结-OC-67】Quartz 2D绘图(4-4)——图形变换+填充处理+core image 滤镜
举报原因:
原因补充:

(最多只允许输入30个字)