首页 > UIGraphicsBeginImageContext - 位图上下文

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

更多相关:

  • 在视频开发中,我们常常看到这样的效果,拖动进度条时,或是在进度条上方或是在屏幕中间,显示拖动进度条位置时刻的某一帧画面。这个需求,如果是你,你会如何做?通常一个需求,不仅要考虑实现,还有考虑一些是否有性能上影响。下面我想到的4个方案:1、在拖动过程中,可以通过TextureView来显示预览图,拖动进度条到某个position后,通过...

  • 项目中需要获取apk的编译日期,首先肯定是用手动的方式获取,但这样容易遗忘,怎么样通过代码的方式获取呢? 其实android 为我们提供了一个BuildConfig的类,android 每次编译的时候都会自动生成 一次BuildConfig 类,这个类包含着编译时的各个参数,所以只需要在这个类中增加一个常量,然后设定这个常量的值就是编...

  • 1.根据用户名获取用户 SPUser user = web.EnsureUser((new SPFieldLookupValue(item["Mitarbeiter"].ToString())).LookupValue);   2.根据guid获取Feature对象 SPFeature listDisplaySettingFeatu...

  • 就用到两条.net自带的获取数据库信息的语句 OleDbConnection con = new OleDbConnection(connection); // OleDB数据库连接实例   // 获取数据库中表的相关信息DataTable dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Ta...

  • 轉自:http://www.cnblogs.com/mrhgw/archive/2006/11/08/553737.html   补充: scrollHeight: 获取对象的滚动高度。 scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollTop:设置或获取位于对象最顶端和窗口中可见...

  • MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 技能水平:初级|语言:英语+中英文字幕(根据原英文字幕机译更准确) |持续时间:3h 1m |大小解压后:1.7 GB 含课程练习文件 C4D继续作为3D艺术家的行业标准解决方案大放异彩,它提供了一套独特的工具,专门用于创建引人注目的运动图形...

  • 由于绘制矢量图的不同技术愈发成熟以及现代浏览器所具备的更强大的计算能力等原因,目前网上出现了越来越多免费 的JavaScript图表和图形绘制解决方案。在本文中就将分享13个优秀实用的JavaScript图表和图形绘制插件,它们少数是独立的框架,大多 数支持条图、线图、饼图等基本图形,很多甚至支持更加复杂的图形,希望对你有所帮助。...