一、简单说明

图形上下文(Graphics Context):是一个CGContextRef类型的数据

图形上下文的作用:保存绘图信息、绘图状态

决定绘制的输出目标(绘制到什么地方去?)(输出目标可以是PDF文件、Bitmap或者显示器的窗口上)

相同的一套绘图序列,指定不同的Graphics Context,就可将相同的图像绘制到不同的目标上。

Quartz2D提供了以下几种类型的Graphics Context:

Bitmap Graphics Context

PDF Graphics Context

Window Graphics Context

Layer Graphics Context

Printer Graphics Context

只要上下文不同,绘制的地方就不同。

本文说明如何把图片绘制到Bitmap上面去,即要求生成一张图片,图片上面保存了绘图信息。

Bitmap就是图片,相当于系统的UIimage。一个UIImage就是一个Bitmap

二、怎么把图片绘制到Bitmap上?

注意:不能在drawRect:方法中直接获取Bitmap的上下文,需要我们自己进行创建。

代码示例:

 1 //2 //  YYViewController.m3 //  06-绘制基本图形4 //5 //  Created by apple on 14-6-22.6 //  Copyright (c) 2014年 itcase. All rights reserved.7 //8 9 #import "YYViewController.h"
10
11 @interface YYViewController ()
12 @property (weak, nonatomic) IBOutlet UIImageView *iv;
13 @end
14
15 @implementation YYViewController
16
17 - (void)viewDidLoad
18 {
19     [super viewDidLoad];
20
21     //加载图片
22     //0.创建一个Bitmap上下文
23     //c语言的方法
24 //    CGBitmapContextCreate(<#void *data#>, <#size_t width#>, <#size_t height#>, <#size_t bitsPerComponent#>, <#size_t bytesPerRow#>, <#CGColorSpaceRef space#>, <#CGBitmapInfo bitmapInfo#>)
25     //oc中封装的方法
26     //方法1
27 //    UIGraphicsBeginImageContext(<#CGSize size#>);
28     //方法2
29     UIGraphicsBeginImageContextWithOptions( CGSizeMake(200, 200), NO, 0);
30     //1.获取bitmap上下文
31     CGContextRef ctx = UIGraphicsGetCurrentContext();
32     //2.绘图(画一个圆)
33     CGContextAddEllipseInRect(ctx, CGRectMake(0, 0, 100, 100));
34     //3.渲染
35     CGContextStrokePath(ctx);
36     //4.获取生成的图片
37     UIImage *image=UIGraphicsGetImageFromCurrentImageContext();
38     //5.显示生成的图片到imageview
39     self.iv.image=image;
40     //6.保存绘制好的图片到文件中
41     //先将图片转换为二进制数据,然后再将图片写到文件中
42 //    UIImageJPEGRepresentation(image, 1); //第二个参数为保存的图片的效果
43     NSData *data=UIImagePNGRepresentation(image);
44     [data writeToFile:@"/Users/apple/Desktop/abc.png" atomically:YES];
45 }
46
47 - (void)didReceiveMemoryWarning
48 {
49     [super didReceiveMemoryWarning];
50     // Dispose of any resources that can be recreated.
51 }
52
53 @end

程序执行效果:

程序执行完毕后,会在指定的位置创建一个abc.png的图片

补充说明:

1.创建Bitmap图形上下文的方法

//方法1   UIGraphicsBeginImageContext(<#CGSize size#>);

//方法2 UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale)

使用两个方法同样都可以创建,但是使用第一个方法将来创建的图片清晰度和质量没有第二种方法的好。
方法2接收三个参数:

CGSize size:指定将来创建出来的bitmap的大小

BOOL opaque:设置透明YES代表透明,NO代表不透明

CGFloat scale:代表缩放,0代表不缩放

创建出来的bitmap就对应一个UIImage对象

2.Quartz2D的内存管理

使用含有“Create”或“Copy”的函数创建的对象,使用完后必须释放,否则将导致内存泄露

使用不含有“Create”或“Copy”的函数获取的对象,则不需要释放

如果retain了一个对象,不再使用时,需要将其release掉

可以使用Quartz 2D的函数来指定retain和release一个对象。例如,如果创建了一个CGColorSpace对象,则使用函数CGColorSpaceRetain和CGColorSpaceRelease来retain和release对象。

也可以使用Core Foundation的CFRetain和CFRelease。注意不能传递NULL值给这些函数

转载于:https://www.cnblogs.com/deng37s/p/4572395.html

iOS开发UI篇—Quartz2D使用(绘制基本图形)相关推荐

  1. iOS开发UI篇—Quartz2D使用(绘图路径)

    iOS开发UI篇-Quartz2D使用(绘图路径) 一.绘图路径 A.简单说明 在画线的时候,方法的内部默认创建一个path.它把路径都放到了path里面去. 1.创建路径  cgmutablepat ...

  2. iOS开发UI篇—Quartz2D简单使用(二)

    iOS开发UI篇-Quartz2D简单使用(二) 一.画文字 代码: // // YYtextview.m // 04-写文字 // // Created by 孔医己 on 14-6-10. // ...

  3. iOS开发UI篇—Quartz2D使用(信纸条纹)

    iOS开发UI篇-Quartz2D使用(信纸条纹) 一.前导程序 新建一个项目,在主控制器文件中实现以下几行代码,就能轻松的完成图片在视图中的平铺. 1 #import "YYViewCon ...

  4. iOS开发UI篇—Quartz2D使用(矩阵操作)

    一.关于矩阵操作 1.画一个四边形 通过设置两个端点(长和宽)来完成一个四边形的绘制. 代码: 1 - (void)drawRect:(CGRect)rect 2 { 3 //画四边形 4 //获取图 ...

  5. android tableview实现多选功能,iOS开发UI篇-tableView在编辑状态下的批量操作(多选)...

    先看下效果图 直接上代码 #import "MyController.h" @interface MyController () { UIButton *button; } @pr ...

  6. iOS开发UI篇—CALayer简介

    iOS开发UI篇-CALayer简介 一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实UI ...

  7. iOS开发UI篇—transframe属性(形变)

    iOS开发UI篇-transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...

  8. iOS开发UI篇—多控制器和导航控制器简单介绍

    iOS开发UI篇-多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...

  9. iOS开发UI篇—UIWindow简单介绍

    iOS开发UI篇-UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWi ...

最新文章

  1. js实现双向链表互联网机顶盒实战应用
  2. 【代码笔记】iOS-二维码
  3. c++ 不允许使用不完整的类型_Python入门高级教程--Python?变量类型
  4. 解决wiremock中velocity脚本(.vm)中文编码乱码问题
  5. [转载]JDBC/Spring/MyBatis性能比较
  6. java 定时任务(三):cron表达式
  7. REVERSE-PRACTICE-BUUCTF-13
  8. dll domodal运行时异常_软件运行异常时的多种排查思路与方法
  9. python实现k core算法_python实现密度聚类(模板代码+sklearn代码)
  10. 虚幻引擎自带的创建插件的插件
  11. Java学习系列(十四)Java面向对象之细谈线程、线程通信(上)
  12. MySQL-高并发优化
  13. POI设置单元格格式
  14. 【优化算法】差分蜂群优化算法(DEABC)【含Matlab源码 1230期】
  15. RDP报表工具:详情式报表
  16. 解决资源监视器不显示的问题。
  17. 注册gitLab时报错There was an error with the reCAPTCHA. Please solve the reCAPTCHA again.
  18. Fundamental of 4G LTE - 学习笔记(1)Duplexing - TDD vs FDD
  19. 计算机论文结束语致谢,致谢范文(15篇) 毕业论文结尾致谢范文
  20. 浅谈USB设备的VID和PID

热门文章

  1. // synopsys_translate_off,parallel_case 和 full_case
  2. 离散周期信号的傅里叶变换
  3. springboot EnableAutoConfiguration
  4. 25.EXTJS 主页面的jsp
  5. vs中不得不会的一些小技巧(1)——细说查找
  6. 在linux内核中获得比jiffies精度更高的时间值【转】
  7. C# 如何实现pfx与snk密钥文件的转换
  8. 数据库Sharding的基本思想和切分策略
  9. zabbix之rpm简单快速安装详解
  10. 如何利用CIC滤波器、CIC补偿滤波器和半带滤波器设计一个高频数字抽取滤波器