久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

iOS開發(fā) 實現(xiàn)手機屏幕指定區(qū)域截屏

 LGPL 2023-05-04 發(fā)布于北京

指定截屏代碼實現(xiàn)

全屏截圖效果

全屏截圖效果

指定區(qū)域截屏效果

指定區(qū)域截屏效果

這里先上代碼,,代碼后面有相關(guān)方法的解釋

第一種方法
代碼下載

 /**
  創(chuàng)建一個基于位圖的上下文(context),并將其設(shè)置為當前上下文(context)

  @param size 參數(shù)size為新創(chuàng)建的位圖上下文的大小,。它同時是由UIGraphicsGetImageFromCurrentImageContext函數(shù)返回的圖形大小
  @param opaque 透明開關(guān),,如果圖形完全不用透明,,設(shè)置為YES以優(yōu)化位圖的存儲,,我們得到的圖片背景將會是黑色,,使用NO,,表示透明,圖片背景色正常
  @param scale 縮放因子 iPhone 4是2.0,,其他是1.0。雖然這里可以用[UIScreen mainScreen].scale來獲取,,但實際上設(shè)為0后,,系統(tǒng)就會自動設(shè)置正確的比例了
  */
   UIGraphicsBeginImageContextWithOptions([[UIScreen mainScreen] bounds].size, YES, 0.0);
   UIView * view = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES];
//把控制器View的內(nèi)容繪制到上下文當中.
//layer是不能夠直接繪制的.要用渲染的方法才能夠讓它繪制到上下文當中。UIGraphicsGetCurrentContext()
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
//從上下文當中生成一張圖片
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
//關(guān)閉上下文.
    UIGraphicsEndImageContext();
/*
//image:要把圖片轉(zhuǎn)成二進制流,,compressionQuality:可壓縮質(zhì)量.
NSData*data =UIImagePNGRepresentation(viewImage);
    */

//上面我們獲得了一個全屏的截圖,,下邊的方法是對這個圖片進行裁剪。
    CGImageRef imageRef =viewImage.CGImage;
    //這里要特別注意,,這里的寬度 CGImageGetWidth(imageRef) 是圖片的像素寬(高度同解),,所以計算截圖區(qū)域時需要按比例來;
//這里舉的例子是寬高屏幕1/2位置在中心
    CGRect rect =  CGRectMake(CGImageGetWidth(imageRef)/4, CGImageGetHeight(imageRef)/2-CGImageGetWidth(imageRef)/2, CGImageGetWidth(imageRef)/2, CGImageGetWidth(imageRef)/2);//這里可以設(shè)置想要截圖的區(qū)域
    
    CGImageRef imageRefRect =CGImageCreateWithImageInRect(imageRef, rect);
    
    UIImage *sendImage =[[UIImage alloc] initWithCGImage:imageRefRect];

第二種方法
代碼下載

    //設(shè)置邊框?qū)挾?    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];
    
    //設(shè)置一個小圓,并設(shè)置成裁剪區(qū)域
    path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(borderWH, borderWH, imageWH, imageWH)];
    
    //把路徑設(shè)置成裁剪區(qū)域
    [path addClip];
    
    //把圖片繪制到上下文當中.
    [self.baseImageView.image drawAtPoint:CGPointMake(borderWH, borderWH)];
    
    //從上下文當中生成一張圖片
    UIImage*newImage =UIGraphicsGetImageFromCurrentImageContext();
    
    //關(guān)閉上下文.
    UIGraphicsEndImageContext();
    
    self.bottonImageView.image = newImage;

相關(guān)知識詳解

UIGraphicsBeginImageContext創(chuàng)建一個基于位圖的上下文(context),并將其設(shè)置為當前上下文(context),。方法聲明如下:

void UIGraphicsBeginImageContext(CGSize size);

參數(shù)size為新創(chuàng)建的位圖上下文的大小,。它同時是UIGraphicsGetImageFromCurrentImageContext函數(shù)返回的圖形大小。
該函數(shù)的功能同UIGraphicsBeginImageContextWithOptions的功能相同,,相當與UIGraphicsBeginImageContextWithOptionsopaque參數(shù)為NO,,scale因子為1.0。

UIGraphicsBeginImageContextWithOptions函數(shù)原型為:

void UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale);

size——同UIGraphicsBeginImageContext
opaque—透明開關(guān),,如果圖形完全不用透明,,設(shè)置為YES以優(yōu)化位圖的存儲,。
scale—–縮放因子 iPhone 4是2.0,其他是1.0,。雖然這里可以用[UIScreen mainScreen].scale來獲取,,但實際上設(shè)為0后,系統(tǒng)就會自動設(shè)置正確的比例了,。


其他的截屏方法

第二種
這是在比較常見的截圖方法,,不過不支持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;

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多