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有所不同。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM