2013-01-23 32 views
6

下面的代碼獲得UIImage的當前屏幕:如何在當前屏幕的ios獲得特定區域的UIImage

UIGraphicsBeginImageContext(self.view.frame.size); 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    [self.view.layer renderInContext:ctx]; 
    UIImage *backgroundImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

如果我有一個的CGRect正確,而且我只想得到當前屏幕的UIImage在那裏,我該怎麼辦?

回答

14

對於獲取矩形(裁剪)圖片:

UIImage *croppedImg = nil; 
CGRect cropRect = CGRectMake(AS You Need); 
croppedImg = [self croppIngimageByImageName:self.imageView.image toRect:cropRect]; 

使用下面的方法(只要你想圖像的大小)返回UIImage

- (UIImage *)croppIngimageByImageName:(UIImage *)imageToCrop toRect:(CGRect)rect 
    { 
     //CGRect CropRect = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height+15); 

     CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect); 
     UIImage *cropped = [UIImage imageWithCGImage:imageRef]; 
     CGImageRelease(imageRef); 

     return cropped; 
    } 
+2

工作!我想投票表示感謝,但我沒有足夠的聲望。 – grandagile

0

傳遞其所需的圖像按照您的要求修剪並更改image.size.width和image.size.height

-(UIImage *)cropSquareImage:(UIImage *)image 
{ 
    CGRect cropRect; 

    if (image.size.width < image.size.height) 
    { 
     float x = 0; 
     float y = (image.size.height/2) - (image.size.width/2); 

     cropRect = CGRectMake(x, y, image.size.width, image.size.width); 
    } 
    else 
    { 
     float x = (image.size.width/2) - (image.size.height/2); 
     float y = 0; 

     cropRect = CGRectMake(x, y, image.size.height, image.size.height); 
    } 


    CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], cropRect); 
    return [UIImage imageWithCGImage:imageRef]; 


} 
+0

你的'imageRef'會泄漏內存,你需要'CGImageRelease(imageRef);'在結尾 – WDUK

+0

是的,但是如果arc被禁用,並且在最後? – Dhara

+0

ARC不適用於CGImageRef。最後,我的意思是在你返回'UIImage'之前。 – WDUK

相關問題