【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 2D绘图详解(Quartz 2D)之概述

原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow前言:最近在研究自定义控件,由于想要彻底的...
  • Hello_Hwc
  • Hello_Hwc
  • 2015年10月21日 11:55
  • 3217

iOS绘图与滤镜

iOS绘图概述:在iOS中可以很容易开发出绚丽的界面效果,是基于两大图形绘制框架-Quartz 2D绘制2D图形和Core Image中强大的滤镜功能.1.Quartz 2D-二维绘图引擎简介:是iO...
  • CSDNhaoren13
  • CSDNhaoren13
  • 2016年03月05日 16:39
  • 1105

[Swift]使用Quartz 2D进行绘图

转载自:http://www.jianshu.com/p/78cf97bfd072 iOS绘图技术主要有UIKit,Quartz 2D,Core Animatio...
  • liangliang2727
  • liangliang2727
  • 2016年09月07日 05:49
  • 461

Quartz 2D之基本图形绘制

-(UIImage *)drawImageAtImageContext{ //获得一个位图图形上下文 CGSize size=CGSizeMake(300, 188);//画...
  • longshihua
  • longshihua
  • 2016年01月12日 16:35
  • 582

iOS开发 高级绘图

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

Quartz2D绘图<四>图形填充

1,举行的填充 CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);//设置填充颜色 CGContextFi...
  • HHL110120
  • HHL110120
  • 2015年10月01日 11:27
  • 604

iOS --- CoreGraphics中三种绘图context切换方式的区别

CoreGraphics的使用过程中,经常会遇到绘图context切换的操作,一般使用用到CGContextSaveGState/CGContextRestoreGState,UIGraphicsPu...
  • icetime17
  • icetime17
  • 2015年12月29日 21:45
  • 2443

core image 滤镜对照表

CoreImage[6143:615100] FilterName: (     CIAccordionFoldTransition,     CIAdditionCompositing,  ...
  • czxghostyueqiu
  • czxghostyueqiu
  • 2015年06月01日 11:03
  • 1348

iOS开发系列--Quartz 2D绘制2D图形和Core Image中强大的滤镜功能

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

iOS开发系列--Quartz 2D绘制2D图形和Core Image中强大的滤镜功能

概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架。今天我们将围绕iOS中两大图形、图像绘图框架进行介绍:Quartz 2D绘制2D图形...
  • Vic__li
  • Vic__li
  • 2015年11月20日 21:13
  • 716
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【IOS 开发学习总结-OC-67】Quartz 2D绘图(4-4)——图形变换+填充处理+core image 滤镜
举报原因:
原因补充:

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