UIImage 使用UIGraphicsBeginImageContext做一些簡單操作


UIImage 繪制


UIGraphicsBeginImageContext

步驟:

  1. UIGraphicsBeginImageContext(CGSize size) 或者 UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale)
    • 准備繪圖環境
  • CGContextRef __nullable UIGraphicsGetCurrentContext(void)
    • 獲取繪圖的CGContextRef
  • 開始繪圖
  • UIImage* UIGraphicsGetImageFromCurrentImageContext(void);
    • 獲取當前繪制的圖形
  • void UIGraphicsEndImageContext(void);
    • 關閉繪圖環境

簡單應用:

等比縮放 將圖片改為自定義大小

- (UIImage *) scaleImage:(UIImage *)image toScale:(float)scaleSize {
	UIGraphicsBeginImageContext(CGSizeMake(image.size.width * scaleSize, image.size.height * scaleSize);
	[image drawInRect:CGRectMake(0, 0, image.size.width * scaleSize, image.size.height * scaleSize)];
	UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
	UIGraphicsEndImageContext();
	return scaledImage;
}

將UIView轉為UIImage

-(UIImage*) captureView:(UIView *)theView {
	CGRect rect = theView.frame;
	UIGraphicsBeginImageContext(rect.size);
	CGContextRef context = UIGraphicsGetCurrentContext();
	[theView.layer renderInContext:context];
	UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
	UIGraphicsEndImageContext();
	return img;
}	

** renderInContext 只會繪制在左上角 **

** 若要將UIView繪制在指定地方可以平移context **
如:

CGContextTranslateCTM(context, 50, 50);
[theView.layer renderInContext:context];
CGContextTranslateCTM(context, -50, -50);

根據給定得圖片,從其指定區域截取一張新得圖片

-(UIImage *)getImageFromImage{
//大圖bigImage
//定義myImageRect,截圖的區域
CGRect myImageRect = CGRectMake(10.0, 10.0, 57.0, 57.0);
UIImage* bigImage= [UIImage imageNamed:@"k00030.jpg"];
CGImageRef imageRef = bigImage.CGImage;
CGImageRef subImageRef =CGImageCreateWithImageInRect(imageRef, myImageRect);
CGSize size;
size.width = 57.0;
size.height = 57.0;
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, myImageRect, subImageRef);
UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];
UIGraphicsEndImageContext();
return smallImage;
}	

合並兩張圖片

-(UIImage *)addImage:(UIImage *)image1 toImage:(UIImage*)image2 {
UIGraphicsBeginImageContext(image1.size);
// Draw image1
[image1 drawInRect:CGRectMake(0, 0, image1.size.width,image1.size.height)];
// Draw image2
[image2 drawInRect:CGRectMake(0, 0, image2.size.width,image2.size.height)];
UIImage *resultingImage =UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultingImage;
}

截取當前屏幕

CGSize windowSize = behandView.bounds.size;
UIGraphicsBeginImageContextWithOptions(windowSize, YES, 2.0);
CGContextRef context = UIGraphicsGetCurrentContext();
[behandView.window.layer renderInContext:context];
UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();	

截取scrollview

-(UIImage *)captureScrollView:(UIScrollView *)scrollView{

UIImage* image = nil;
UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, NO, 2.0f);

scrollView.contentOffset = CGPointZero;
scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
[scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return image;

}


免責聲明!

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



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