简体   繁体   English

如何从矩形叠加层裁剪uiimageView?

[英]How to crop an uiimageView from a rectangle overlay?

I want to crop a part of an uiimageview that on my view controller. 我想在视图控制器上裁剪uiimageview的一部分。 I'm creating a rectangle on top of it: 我在其顶部创建一个矩形:

        UIGraphicsBeginImageContext(self.view.bounds.size);

        CGContextRef context = UIGraphicsGetCurrentContext();

        CGContextMoveToPoint(context, newPoint1.x, newPoint1.y);
        CGContextAddLineToPoint(context, newPoint1.x, newPoint2.y);
        CGContextAddLineToPoint(context, newPoint2.x, newPoint2.y);
        CGContextAddLineToPoint(context, newPoint2.x, newPoint1.y);
        CGContextAddLineToPoint(context, newPoint1.x, newPoint1.y);
        CGContextClosePath(context);

        UIColor *blue = [UIColor colorWithRed: (0.0/255.0 ) green: (0.0/255.0) blue: (255.0/255.0) alpha:0.4];
        CGContextSetFillColorWithColor(context, blue.CGColor);

        CGContextDrawPath(context, kCGPathFillStroke);

I can't figure out how to crop it right. 我不知道如何正确裁剪。 I'm able to retrieve a capture of the screen : entirely blank with my rectangle on it: 我能够检索屏幕的捕获内容:完全空白,上面有矩形:

UIImage *cropImage = UIGraphicsGetImageFromCurrentImageContext();
        rectImage = cropImage;

        UIGraphicsEndImageContext();

        UIImageCrop *rectImageView = [[UIImageCrop alloc]initWithImage:rectImage];

        [self.view addSubview:rectImageView];

So I'm aware that there is something I've missed about it, any help? 所以我知道我错过了一些东西,有什么帮助吗?

- (UIImage *)captureScreenInRect:(CGRect)captureFrame
{

    CALayer *layer;
    layer = self.view.layer;
    UIGraphicsBeginImageContext(self.view.frame.size); 
    CGContextClipToRect (UIGraphicsGetCurrentContext(),captureFrame);
    [layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return screenImage;
}

this is just for reference change this code according to your requirement 仅供参考,根据您的要求更改此代码

hope this will help you 希望这个能对您有所帮助

You can get cropped image using : 您可以使用裁剪图像:

- (UIImage*) getCroppedImage {
    CGRect rect = PASS_YOUR_RECT;

    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    // translated rectangle for drawing sub image 
    CGRect drawRect = CGRectMake(-rect.origin.x, -rect.origin.y, your_image.size.width, your_image.size.height);

    // clip to the bounds of the image context
    // not strictly necessary as it will get clipped anyway?
    CGContextClipToRect(context, CGRectMake(0, 0, rect.size.width, rect.size.height));

    // draw image
    [your_image drawInRect:drawRect];

    // grab image
    UIImage* croppedImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return croppedImage;
}

Hope it helps you. 希望对您有帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM