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 {
        
        //  获取到window
        let 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值