iOS 获取屏幕截图和缩放、裁剪图片

   1、截图:
-(UIImage *)screenImageWithSize:(CGSize )imgSize{
    UIGraphicsBeginImageContext(imgSize);
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    AppDelegate * app = (AppDelegate *)[UIApplication sharedApplication].delegate; //获取app的appdelegate,便于取到当前的window用来截屏
    [app.window.layer renderInContext:context];
    
    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return img;
}

UIGraphicsBeginImageContext()方法会构建一个基于位图(bitmap)的图形context,并且这个context会成为当前context。然后通过renderInContext方法把 app.window.layer 渲染进当前的图形context。最后通过UIGraphicsGetImageFromCurrentImageContext()获取当前图形context上的图片,从而获取屏幕截图。

  UIGraphicsBeginImageContext()方法传入唯一参数,是一个CGSize变量,用来指定图形context的大小,所以获取屏幕截图的时候这个size该是屏幕的大小。其实了解了这个过程,就知道这个方法可以获取任意区域的截图,当然是必须当前页面的一部分。你需要截取哪个view的图像,就让这个view的layer调用renderInContext把图形渲染进当前图形context。


2、缩放图片:

-(UIImage *)scaleImage:(UIImage *)img toScale:(CGFloat )scale{
    CGSize imgSize = img.size;
    CGSize scaleSize = CGSizeMake(imgSize.width*scale, imgSize.height*scale);
    
    UIGraphicsBeginImageContext(scaleSize);
    [img drawInRect:CGRectMake(0, 0, imgSize.width*scale, imgSize.height*scale)];
    
    UIImage * scaleImg = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return scaleImg;
}
同样使用UIGraphicsBeginImageContext构建一个图形context,只是这里不是把某个view的layer画进context,而是使用drawInRect:方法,把传入的img画进当前context。参数Rect是用来指定图片绘制的区域,大小为图片原本大小的倍数,这样绘制进去的图片就会相应的缩小。通过 UIGraphicsGetImageFromCurrentImageContext()获取图片。可以把context看成画布,然后图片是一幅画,这幅画画在了context这个画布上,并且指定范围大小。

   如果想要达到剪切效果,那么只需要img调用drawInRect:方法的时候传入的rect不包含在context的区域里面就好。比如context的size是(100,100),传入的rect是(0,0,100,100)的话,刚好截取图片;如果rect是(0,-50,100,100)的话,那么图片就会被截得下半部分。如果rect是(0,0,200,200),那么刚好图片左上角1/4的部分被截取。

  获取截图还有个简单方法:

self.imgView.image = [UIImage imageWithCGImage:CGImageCreateWithImageInRect(img.CGImage, CGRectMake(0, 0, 800, 600))];
传入的CGRect值用来指定截图图片上的什么区域,和是截图相对原图片的坐标区域,和上面截图方法里传入的rect有所不同。

转载于:https://www.cnblogs.com/walkingZero/p/3920496.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值