2013-01-23 29 views
6

Các mã sau đây được UIImage của màn hình hiện tại:Làm thế nào để có được UIImage của một khu vực cụ thể trong ios màn hình hiện

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

Nếu tôi có một rect CGRect và tôi muốn để có được chỉ UIImage của màn hình hiện tại trong đó rect, làm thế nào tôi có thể làm gì?

Trả lời

14

Đối Nhận Rect (Crop) hình ảnh:

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

Sử dụng phương pháp sau đây trả lại UIImage (như Bạn muốn kích thước của hình ảnh)

- (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

Điều đó có hiệu quả! Tôi muốn bỏ phiếu để cảm ơn nhưng tôi không có đủ danh tiếng. – grandagile

0

Vượt qua hình ảnh mà bạn muốn được cắt và thay đổi image.size.width và image.size.height theo yêu cầu của bạn

-(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' của bạn sẽ bị rò rỉ bộ nhớ, bạn cần' CGImageRelease (imageRef); 'ở cuối – WDUK

+0

có nhưng nếu vòng cung bị tắt và ở đâu? – Dhara

+0

ARC không áp dụng cho CGImageRef. Cuối cùng, ý tôi là trước khi bạn trả lại 'UIImage'. – WDUK