2011-08-24 30 views
19

Tôi đã sử dụng phương pháp này để chuyển đổi UIView thành UIImage. ví dụ: màn hình chụp của một cái nhìn -Chụp UIView dưới dạng UIImage

@interface UIView(Extended) 

- (UIImage *) imageByRenderingView; 

@end 


@implementation UIView(Extended) 


- (UIImage *)imageByRenderingView 
{ 
    UIGraphicsBeginImageContext(self.bounds.size); 
    [self.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return resultingImage; 
} 

@end 

Để sử dụng nó, tôi làm điều này -

UIImage *currImage = [self.view imageByRenderingView];

này cung cấp cho các đại diện hình ảnh của toàn bộ UIView. Bây giờ tôi muốn 2 hình ảnh, một là nửa trên của UIView và một là nửa dưới. Làm thế nào để làm điều đó?

+0

Lưu ý rằng (từ kinh nghiệm của tôi) 'renderInContext:' có thể khá tốn kém. Tôi đang làm nó trong một 'cellForRowAtIndexPath:' (không có, ngay bây giờ, một tùy chọn khác) và điều này rõ ràng có nghĩa là tụt hậu. –

Trả lời

11

Bạn có thể chia UIImage của mình theo hai bằng cách sử dụng mã này:

CGImageRef topOfImageCG = 
     CGImageCreateWithImageInRect(currImage.CGImage, 
             CGRectMake(0, 
               0, 
               currImage.size.width, 
               currImage.size.height/2.0)); 

UIImage *topOfImage = [UIImage imageWithCGImage:topOfImageCG]; 

CGImageRelease(topOfImageCG); 
+0

nhưng bộ chọn này mất - 'CGImageRef CGImageCreateWithImageInRect (hình ảnh CGImageRef, CGRect rect);'. Làm thế nào để chuyển đổi 'UIImage' mà tôi có' CGImageRef'? –

+0

Git It! image.CGImage nơi hình ảnh là đối tượng UIImage :) –

+0

Bạn nói đúng, tôi vừa cập nhật mẫu. – pgb

Các vấn đề liên quan