UIGraphicsBeginImageContext

首先,先来认识一个UIGraphicsBeginImageContext,它会创建一个基于位图的上下文(context)(默认创建一个透明的位图上下文),并将其设置为当前上下文。

位图图形上下文UIKit是不会负责创建的,所以需要用户手动创建,并且需要在使用完毕后关闭它。在使用UIKit中系统创建的图形上下文的时候,我们只能在drawRect:方法中使用,由于位图图形上下文是由我们手动创建的,所以可以放到任何方法中调用,此外,这个方法并没有返回值,如果我们要得到我们创建的图形上下文只需要在创建上下文之后、关闭之前调用UIGraphicsGetCurrentContext()方法,此时取得的上下文就是我们自己创建的图形上下文了。

方法声明如下:

void UIGraphicsBeginImageContext(CGSize size);

参数size为新创建的位图上下文的大小。它同时是由UIGraphicsGetImageFromCurrentImageContext函数返回的图形的大小。该函数的功能通UIGraphicsBeginImageContextWithOptions的功能相同,相当于UIGraphicsBeginImageContextWithOptions的opaque的参数为NO,scale因子为1.0.

方法声明如下:

void UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale);

size:同UIGraphicsBeginImageContext

opaque:透明开关,如果图形完全不同透明,设置为YES以优化位图的存储。

scale:缩放因子。


demo1:根据颜色生成一张图片

static func colorImage( size : CGSize, color : UIColor ) -> UIImage {//  开启一个图形上下文UIGraphicsBeginImageContext(size)//  获取到这个上下文let context = UIGraphicsGetCurrentContext()//  设置颜色context?.setFillColor(color.cgColor)//  绘制context?.fill(CGRect(x: 0, y: 0, width: size.width, height: size.height))//  获取到这张图片let image = UIGraphicsGetImageFromCurrentImageContext()//  关闭UIGraphicsEndImageContext()return image!}

demo2:获取屏幕截图

//  获取屏幕的截图static func screenImage() -> UIImage {//  获取到windowlet window = UIApplication.shared.delegate?.window as? UIWindow//  开启一个图形上下文UIGraphicsBeginImageContext(UIScreen.main.bounds.size)//  系统截屏方法window?.drawHierarchy(in: UIScreen.main.bounds, afterScreenUpdates: true)//  获取到这张图片let image = UIGraphicsGetImageFromCurrentImageContext()//  关闭UIGraphicsEndImageContext()return image!}

demo3:根据view生成图片

//  根据view生成图片static func viewImage(view : UIView) -> UIImage {//  开启一个图形上下文UIGraphicsBeginImageContext(view.frame.size)//  获取到这个上下文let context = UIGraphicsGetCurrentContext()// 渲染内容到上下文view.layer.render(in: context!)//  获取到这张图片let image = UIGraphicsGetImageFromCurrentImageContext()//  关闭UIGraphicsEndImageContext()return image!}

demo4:直接将图片切割圆角

//  切割图片生成圆角func cicleImage() -> UIImage {//  开启一个图形上下文UIGraphicsBeginImageContext(size)//  获取到这个上下文let context = UIGraphicsGetCurrentContext()//  设置圆形context?.addEllipse(in: CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height))//  裁剪context?.clip()//  重新绘制self.draw(in: CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height))//  获取到这张图片let image = UIGraphicsGetImageFromCurrentImageContext()//  关闭UIGraphicsEndImageContext()return image!}

  

转载于:https://www.cnblogs.com/chenjiangxiaoyu/p/7464569.html

UIGraphicsBeginImageContext - 位图上下文相关推荐

  1. UIGraphicsBeginImageContext系列知识

    UIGraphicsBeginImageContext 创建一个基于位图的上下文(context),并将其设置为当前上下文(context).方法声明如下: 参数size为新创建的位图上下文的大小.它 ...

  2. iOS 多线程的四种技术方案

    iOS 多线程的四种技术方案 image pthread 实现多线程操作 代码实现: void * run(void *param) {for (NSInteger i = 0; i < 100 ...

  3. iOS_24_画画板(含取色板)

    终于效果例如以下: 一.简单说明1.使用一个数组 strokesArr(笔画数组)记录全部笔画.数组中保存的是一个个的笔画字典,一个字典就是一个笔画.笔画字典中有三项:笔画的大小.颜色.pointsA ...

  4. UI进阶--Quartz2D和触摸事件的简单使用:简易涂鸦板

    需求:实现一个简易的涂鸦板应用,使用鼠标在涂鸦板内拖动即可进行涂鸦,点击保存按钮,可以把完成的涂鸦保存,点击回退按钮可以向后退回一步,点击清空可以让涂鸦板清空. 实现步骤: 1.布局storyboar ...

  5. IOS启程06—iOS设置圆角图片

    iOS设置圆角的三种方式 1 方法一 通过设置layer的属性 UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMak ...

  6. IOS中设置圆角图片

    2019独角兽企业重金招聘Python工程师标准>>> ##iOS设置圆角的三种方式 <hr/> 1 方法一 通过设置layer的属性 UIImageView *imag ...

  7. iPhone与iPad开发实战读书笔记

    iPhone开发一些读书笔记 手机应用分类 1.教育工具 2.生活工具 3.社交应用 4.定位工具 5.游戏 6.报纸和杂志的阅读器 7.移动办公应用 8.财经工具 9.手机购物应用 10.风景区相关 ...

  8. 绘图与滤镜全面解析--Quartz 2D 、Core Image

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

  9. 动画,在我眼中,详细

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

最新文章

  1. 深度:语音技术革命正在改变人类的交流方式
  2. 特殊的Windows消息
  3. python3.7下载包的命令_python3.7中安装paddleocr及paddlepaddle包的多种方法
  4. python 自学需要多久-怎么自学python,大概要多久?
  5. Android-TCPDump for Android(抓TCP数据包工具)
  6. Ubuntu cocos2d-x 3.13版本游戏开发学习系列3 Cocos2d-x的坐标系
  7. 一起学nRF51xx 7 -  spi
  8. 手写vue2的Lazyload
  9. spring 注释的作用_Spring的@Primary注释在起作用
  10. Python+OpenCV:阈值分割
  11. php get header url,php函数get_headers是HEAD请求还是GET请求
  12. 重置计算机命令行,怎么用系统命令来重置网络设置
  13. ALTRUN 工具使用笔记
  14. FFT 采样频率和采样点数的选取
  15. 新颖的自我介绍_有关最新颖的自我介绍
  16. 这世上本来没有路,走的人多了,也便成了路
  17. easyExcel实现单sheet多子表,并结合动态表头,复杂表头
  18. conda安装pytorch下载太慢
  19. 创业7堂课:看准路,选对人,找到钱
  20. PI 实时数据库系统

热门文章

  1. java jdk 1.8 安装_下载、安装、配置 java jdk1.8
  2. usaco Shaping Regions
  3. intval0.57100 php_php中0,'',null,false,true,FLASE,TREU,array()的相等恒等学习
  4. php分页显示页数代码,php-Codeigniter分页显示结果数和页数
  5. linux 窗口z order,wxPython窗口z-order设置
  6. html代码闪烁的文字怎么打,HTML最简单的文字闪烁代码
  7. win2008怎么配置php,Win2008 PHP 配置环境搭建 教程
  8. Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)
  9. keras 的 example 文件 mnist_cnn.py 解析
  10. Linux那些事儿 之 戏说USB(30)驱动的生命线(二)