UIGraphicsBeginImageContext - 位图上下文
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 - 位图上下文相关推荐
- UIGraphicsBeginImageContext系列知识
UIGraphicsBeginImageContext 创建一个基于位图的上下文(context),并将其设置为当前上下文(context).方法声明如下: 参数size为新创建的位图上下文的大小.它 ...
- iOS 多线程的四种技术方案
iOS 多线程的四种技术方案 image pthread 实现多线程操作 代码实现: void * run(void *param) {for (NSInteger i = 0; i < 100 ...
- iOS_24_画画板(含取色板)
终于效果例如以下: 一.简单说明1.使用一个数组 strokesArr(笔画数组)记录全部笔画.数组中保存的是一个个的笔画字典,一个字典就是一个笔画.笔画字典中有三项:笔画的大小.颜色.pointsA ...
- UI进阶--Quartz2D和触摸事件的简单使用:简易涂鸦板
需求:实现一个简易的涂鸦板应用,使用鼠标在涂鸦板内拖动即可进行涂鸦,点击保存按钮,可以把完成的涂鸦保存,点击回退按钮可以向后退回一步,点击清空可以让涂鸦板清空. 实现步骤: 1.布局storyboar ...
- IOS启程06—iOS设置圆角图片
iOS设置圆角的三种方式 1 方法一 通过设置layer的属性 UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMak ...
- IOS中设置圆角图片
2019独角兽企业重金招聘Python工程师标准>>> ##iOS设置圆角的三种方式 <hr/> 1 方法一 通过设置layer的属性 UIImageView *imag ...
- iPhone与iPad开发实战读书笔记
iPhone开发一些读书笔记 手机应用分类 1.教育工具 2.生活工具 3.社交应用 4.定位工具 5.游戏 6.报纸和杂志的阅读器 7.移动办公应用 8.财经工具 9.手机购物应用 10.风景区相关 ...
- 绘图与滤镜全面解析--Quartz 2D 、Core Image
绘图与滤镜全面解析 概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz 2 ...
- 动画,在我眼中,详细
概述 在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架.今天我们将围绕iOS中两大图形.图像绘图框架进行介绍:Quartz 2D绘制2D图形和Co ...
最新文章
- 深度:语音技术革命正在改变人类的交流方式
- 特殊的Windows消息
- python3.7下载包的命令_python3.7中安装paddleocr及paddlepaddle包的多种方法
- python 自学需要多久-怎么自学python,大概要多久?
- Android-TCPDump for Android(抓TCP数据包工具)
- Ubuntu cocos2d-x 3.13版本游戏开发学习系列3 Cocos2d-x的坐标系
- 一起学nRF51xx 7 - spi
- 手写vue2的Lazyload
- spring 注释的作用_Spring的@Primary注释在起作用
- Python+OpenCV:阈值分割
- php get header url,php函数get_headers是HEAD请求还是GET请求
- 重置计算机命令行,怎么用系统命令来重置网络设置
- ALTRUN 工具使用笔记
- FFT 采样频率和采样点数的选取
- 新颖的自我介绍_有关最新颖的自我介绍
- 这世上本来没有路,走的人多了,也便成了路
- easyExcel实现单sheet多子表,并结合动态表头,复杂表头
- conda安装pytorch下载太慢
- 创业7堂课:看准路,选对人,找到钱
- PI 实时数据库系统
热门文章
- java jdk 1.8 安装_下载、安装、配置 java jdk1.8
- usaco Shaping Regions
- intval0.57100 php_php中0,'',null,false,true,FLASE,TREU,array()的相等恒等学习
- php分页显示页数代码,php-Codeigniter分页显示结果数和页数
- linux 窗口z order,wxPython窗口z-order设置
- html代码闪烁的文字怎么打,HTML最简单的文字闪烁代码
- win2008怎么配置php,Win2008 PHP 配置环境搭建 教程
- Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)
- keras 的 example 文件 mnist_cnn.py 解析
- Linux那些事儿 之 戏说USB(30)驱动的生命线(二)