创建UIImage剪切

时间:2012-05-09 13:53:51

标签: objective-c ios xcode uiview uiimageview

我有一个UIView,其中包含2 UIImageViews - 框架和框架后面的图片。框架不是矩形 - 它是不规则的形状。用户可以操作画面后面的图片(缩放,旋转和平移),当它们完成时,我想捕捉帧内图片的剪切 - 而不是图片和帧一起。有没有办法可以做到这一点?

我已经设法将图片和框架拼接成一个单独的图像,如下所示,但我只想要图片,如果成功提取将具有框架形状的边框。

- (IBAction)renderPhoto:(id)sender {
    //Combine the layers into a single image
    UIView *canvas = [[[sender superview] subviews] objectAtIndex:0];
    UIGraphicsBeginImageContext(canvas.bounds.size);
    [canvas.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *combinedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
}

2 个答案:

答案 0 :(得分:2)

使用我的这个方法..

- (UIImage*)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect
{

    UIGraphicsBeginImageContext(photo.frame.size);/// use your screen or photo frame
    [photo.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();



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

    /*    no origin .....
    UIGraphicsBeginImageContext(tempview.frame.size);
    [[self.photo layer] renderInContext:UIGraphicsGetCurrentContext()];   
    cropped= UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext(); 
    */
        return cropped;
}

希望,这有助于你.... :)

答案 1 :(得分:0)

您可以从框架创建蒙版并将此蒙版应用于目标图像,从而基本上从目标图像中剪切帧。或者,根据您最终使用最终图像的方式,在执行绘图时使用框架剪切上下文可能更简单。

本主题涵盖了所有内容:https://developer.apple.com/library/mac/#documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_images/dq_images.html#//apple_ref/doc/uid/TP30001066-CH212-TPXREF101

第二个选项(裁剪上下文)位于Masking an Image by Clipping the Context