【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

版权声明:本文为博主原创文章,转载注明出处! https://blog.csdn.net/senwin2009/article/details/49363437

Quartz2D绘图<四>图形填充

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

Quartz 2D介绍及基本图形绘制

Quartz 2D介绍及基本图形绘制
  • ppdyhappy
  • ppdyhappy
  • 2015-09-14 16:57:10
  • 482

iOS 2D绘图详解(Quartz 2D)之概述

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

iOS 2D绘图详解(Quartz 2D)之Bitmap

原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow前五篇基础博客路径 iOS 2D绘图详解(...
  • Hello_Hwc
  • Hello_Hwc
  • 2015-11-03 13:53:32
  • 5006

iOS之Quartz2D绘图(一)

01-PPT介绍1.什么是Quartz2D? 他是一个二维的绘图引擎,同时支持iOS和Mac系统2.Quartz2D能完成的工作 画基本线条,绘制文字,图片,截图,自定义UIView....
  • wzc10101415
  • wzc10101415
  • 2016-12-12 17:04:25
  • 358

WPF-画刷、绘图、几何绘图、图形的效果与滤镜、图形变换和动画

本篇将记录一下如何在WPF中绘画和设计动画,这方面一直都不是VS的强项,然而它有一套利器Blend;这方面也不是我的优势,幸好我有博客园,能记录一下学习的过程。在本记录中,为了更好的理解绘画与动画,多...
  • zhangjinyi
  • zhangjinyi
  • 2014-12-30 20:38:50
  • 5277

iOS8 Core Image In Swift:自动改善图像以及内置滤镜的使用

Core Image是一个很强大的框架。它可以让你简单地应用各种滤镜来处理图像,比如修改鲜艳程度, 色泽, 或者曝光。 它利用GPU(或者CPU)来非常快速、甚至实时地处理图像数据和视频的帧。并且隐藏...
  • zhangao0086
  • zhangao0086
  • 2014-09-06 23:33:29
  • 21512

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

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

Quartz2D - 基本图形绘制(线条)

Quartz2D在iOS开发中的价值 为了便于搭建美观的UI界面,iOS提供了UIKit框架,里面有各种各样的UI控件 UILabel:显示文字 UIImageView:显示图片 UIBu...
  • github_26672553
  • github_26672553
  • 2016-03-06 15:00:49
  • 419

IOS画图库 - Core Graphics/QuartZ 2D 和OpenGL ES

转自:http://blog.sina.com.cn/s/blog_79fded950101h3g4.html +demo 连接  http://blog.csdn.net/zhibude...
  • u010013695
  • u010013695
  • 2014-02-28 12:59:09
  • 2337
收藏助手
不良信息举报
您举报文章:【IOS 开发学习总结-OC-67】Quartz 2D绘图(4-4)——图形变换+填充处理+core image 滤镜
举报原因:
原因补充:

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