截取UIImage iOS的截图

时间:2013-11-30 09:59:07

标签: objective-c image-processing uiimageview screenshot

我想在iOS应用中截取屏幕的特定部分。附加的图像是屏幕的一部分。在这里,我想截取包含3个UIImageViews的红色标记矩形区域的屏幕截图,其中包含背景处的白色图像帧,带有咖啡杯的图像和咖啡上的苹果标志图像。

enter image description here

我正在使用以下代码来执行此操作...

- (UIImage *)captureView:(UIView *)view withArea:(CGRect)screenRect {

    UIGraphicsBeginImageContext(screenRect.size);

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [[UIColor blackColor] set];
    CGContextFillRect(ctx, screenRect);

    [view.layer renderInContext:ctx];

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return newImage ;
}

像这样调用

UIImage *viewImage = [self captureView:self.FrameImageView withArea:self.FrameImageView.bounds];

此处FrameImageView是一个UIImageView,它在背景中包含白色图像框。

但我得到的结果如下图所示。

enter image description here

我认为问题是,我的代码是截取FrameImageView层的截图。这就是为什么我只获得背景框架。但是我希望屏幕截图在FrameImageView上包含其他2个UIImageViews,就像第一个图像的红色矩形部分一样。

任何人都可以帮助我,如何解决这个问题。在此先感谢。

2 个答案:

答案 0 :(得分:2)

尝试此变体

 UIGraphicsBeginImageContextWithOptions(FrameImageView.frame.size, YES, 4);

 [_myStreetView drawViewHierarchyInRect:FrameImageView.frame afterScreenUpdates:YES];

 UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();

 UIImageView *img = [[UIImageView alloc] initWithImage:image];

答案 1 :(得分:2)

试试这个:

- (UIImage*)captureView:(UIView *)yourView {
    CGRect rect = [[UIScreen mainScreen] bounds];
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [yourView.layer renderInContext:context];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}