2012-05-09 2 views
0

UIView에는 2 프레임이 포함 된 UIImageViews - 프레임 뒤쪽의 그림이 있습니다. 프레임은 사각형이 아니며 불규칙한 모양입니다. 사용자는 프레임 뒤의 그림 (줌, 회전 및 팬)을 조작 할 수 있으며 완료되면 그림과 프레임이 아닌 프레임 내의 그림 컷 아웃을 캡처하려고합니다. 내가 할 수있는 방법이 있니?UIImage 컷 아웃 만들기

그림과 프레임을 아래 그림과 같이 하나의 이미지로 병합하는 데 성공했습니다. 그러나 추출한 이미지가 프레임 모양의 테두리를 가질 경우에만 이미지가 필요합니다.

- (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(); 
} 

답변

0

내이 방법 ..

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

희망이 당신을 도와 .... 사용 타겟 이미지를 제거하여 본질적으로 타겟 이미지로부터 프레임을 자른다. 또는 최종 이미지를 사용하는 방법에 따라 드로잉을 수행하는 동안 프레임을 사용하여 컨텍스트를 클립하는 것이 더 간단 할 수 있습니다.

이 항목 모두를 커버 : 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을 받고있다.

+0

좋습니다 ... 가이드를 들여다보고 있습니다. 한 가지 질문 - Quartz 생성 함수로 이미지를 만드는 방법은 무엇입니까? 그런 다음 'CGContextClipToMask (combinedImage, CGRectMake (0, 0, combinedImage.size.width, combinedImage.size.height), mask)'와 같은 작업을 수행합니다. 내 결합 된 이미지로? – Smikey

+0

UIImage의 CGImage 속성을 통해 CGImage를 얻을 수 있습니다. 'UIGraphicsBeginImageContext'를 호출 한 후 CGContext : CGContextRef cgContext = UIGraphicsGetCurrentContext();를 얻을 수 있습니다. CGContextClipToMask를 호출 한 후 대상 이미지의 그림을 컨텍스트에 적용해야합니다 (결합 된 프레임 이미지가 아닌 프레임 이미지 만 전달 함 - 기본적으로 후속 드로잉 작업에 영향을 미치므로 드로잉을 생략 함). 프레임이 떨어지는 곳). – Clafou

2

당신은 당신의 프레임에서 마스크를 생성하고이 마스크를 적용 할 수 :

+0

하지만 사각형 프레임을 자르고 싶을 때만 작동합니까? 내 프레임은 불규칙한 모양을 가지고 있습니다 ... – Smikey

+0

오, 그리고 나서 OpenGL ES 2.0에서 몇 가지 inbuilt 함수로 가능하다고 생각합니다. –