iOS开辟 实现手机屏幕指定地区截屏

计算机软件开发 2024-9-15 23:28:37 45 0 来自 中国
指定截屏代码实现

全屏截图结果
指定地区截屏结果
这里先上代码,代码背面有干系方法的表明
第一种方法
代码下载
/**  创建一个基于位图的上下文(context),并将其设置为当前上下文(context)  @param size 参数size为新创建的位图上下文的巨细。它同时是由UIGraphicsGetImageFromCurrentImageContext函数返回的图形巨细  @param opaque 透明开关,如果图形完全不消透明,设置为YES以优化位图的存储,我们得到的图片配景将会是玄色,利用NO,表现透明,图片配景致正常  @param scale 缩放因子 iPhone 4是2.0,其他是1.0。固然这里可以用[UIScreen mainScreen].scale来获取,但现实上设为0后,体系就会自动设置精确的比例了  */   UIGraphicsBeginImageContextWithOptions([[UIScreen mainScreen] bounds].size, YES, 0.0);   UIView * view = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES];//把控制器View的内容绘制到上下文当中.//layer是不可以或许直接绘制的.要用渲染的方法才气够让它绘制到上下文当中。UIGraphicsGetCurrentContext()    [view.layer renderInContext:UIGraphicsGetCurrentContext()];//从上下文当中生成一张图片    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();//关闭上下文.    UIGraphicsEndImageContext();/*//image:要把图片转成二进制流,compressionQuality:可压缩质量.NSData*data =UIImagePNGRepresentation(viewImage);    *///上面我们得到了一个全屏的截图,下边的方法是对这个图片进行裁剪。    CGImageRef imageRef =viewImage.CGImage;    //这里要特殊留意,这里的宽度 CGImageGetWidth(imageRef) 是图片的像素宽(高度同解),以是计算截图地区时须要按比例来;//这里举的例子是宽高屏幕1/2位置在中央    CGRect rect =  CGRectMake(CGImageGetWidth(imageRef)/4, CGImageGetHeight(imageRef)/2-CGImageGetWidth(imageRef)/2, CGImageGetWidth(imageRef)/2, CGImageGetWidth(imageRef)/2);//这里可以设置想要截图的地区        CGImageRef imageRefRect =CGImageCreateWithImageInRect(imageRef, rect);        UIImage *sendImage =[[UIImage alloc] initWithCGImage:imageRefRect];第二种方法
代码下载
    //设置边框宽度    CGFloat borderWH = 5;    //图片宽度(像素)    CGFloat imageWH = self.baseImageView.image.size.width;    NSLog(@"=========%f",imageWH);        //开启一个位图上下文(W = imageWH + 2 * border H = imageWH + 2 * border)    CGSize size =CGSizeMake(imageWH + 2*borderWH, imageWH + 2*borderWH);        UIGraphicsBeginImageContextWithOptions(size,NO,0);        //绘制一个圆形的外形.    UIBezierPath*path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0,0, size.width, size.height)];        //边框颜色    UIColor *color = [UIColor redColor];    [color set];        [path fill];        //设置一个小圆,并设置成裁剪地区    path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(borderWH, borderWH, imageWH, imageWH)];        //把路径设置成裁剪地区    [path addClip];        //把图片绘制到上下文当中.    [self.baseImageView.image drawAtPoint:CGPointMake(borderWH, borderWH)];        //从上下文当中生成一张图片    UIImage*newImage =UIGraphicsGetImageFromCurrentImageContext();        //关闭上下文.    UIGraphicsEndImageContext();        self.bottonImageView.image = newImage;干系知识详解

UIGraphicsBeginImageContext创建一个基于位图的上下文(context),并将其设置为当前上下文(context)。方法声明如下:
void UIGraphicsBeginImageContext(CGSize size);参数size为新创建的位图上下文的巨细。它同时是UIGraphicsGetImageFromCurrentImageContext函数返回的图形巨细。
该函数的功能同UIGraphicsBeginImageContextWithOptions的功能雷同,相称与UIGraphicsBeginImageContextWithOptions的opaque参数为NO,scale因子为1.0。
UIGraphicsBeginImageContextWithOptions函数原型为:
void UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale);size——同UIGraphicsBeginImageContext
opaque—透明开关,如果图形完全不消透明,设置为YES以优化位图的存储。
scale—–缩放因子 iPhone 4是2.0,其他是1.0。固然这里可以用[UIScreen mainScreen].scale来获取,但现实上设为0后,体系就会自动设置精确的比例了。
其他的截屏方法

第二种
这是在比力常见的截图方法,不外不支持Retina屏幕。
    UIGraphicsBeginImageContext(self.view.frame.size);    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return image;第三种
从iPhone 4、iPod Touch 4开始,Apple渐渐接纳Retina屏幕,于是在iOS 4的SDK中我们有了,上面的截图方法也自然酿成了如许。
  UIGraphicsBeginImageContextWithOptions(self.view.frame.size, NO, 0.0);    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return image;第四种
大概你会说偶然Hook的是一个按钮的方法,用第三个方法的话,根本找不到view来传值,不外还好,iOS 7又提供了一些UIScreen的API。
    UIView * view = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES];        UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0);    [view.layer renderInContext:UIGraphicsGetCurrentContext()];    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return image;
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 22:35, Processed in 0.129173 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表