2013-12-07 3 views
2

컨텍스트에 그려지고 CGImageRef로 변환되는 경로가 주어지면 컨텍스트 (제공된 전경 이미지가 있음)를 클립핑하면 어떻게됩니까? 그 컨텍스트는 CGImage (이전에 경로였습니다)에 의해 가려졌습니다?경로로 마스킹되도록 현재 컨텍스트 클리핑

완전히 명확하지 않은 경우 아래 질문의 코드가 내 요점을 잘 설명해야합니다. 이 모든 것은 UIView의 drawRect : 메서드에서 호출되며 scaledImageRectangle (UIImage * image, CGRect rect) 함수는 단지 사각형을 반환합니다. 예를 들어

// Close the path 
    CGContextClosePath(context); 
    CGContextDrawPath(context, kCGPathFillStroke); 

    // Mask the image 
    CGImageRef mask = CGBitmapContextCreateImage(context); 
    [foregroundImage drawInRect:scaledImageRectangle(foregroundImage, rect)]; 
    CGContextClipToMask(context, scaledImageRectangle(foregroundImage, rect), mask); 

    // Finally draw the masked image 
    UIImage *maskedImage = [UIImage imageWithCGImage:CGBitmapContextCreateImage(context)]; 
    [maskedImage drawInRect:scaledImageRectangle(foregroundImage, rect)]; 

가 여기에 경로 여기 Before mask

그리고를 나타내는 검은 선이있는 이미지 것은 이미지가 마스크 때처럼 보일 것입니다 무엇을 내가 만들 의향이 될 수 After mask

+2

조치를 취하고 달성하려는 최종 결과에 대해 설명하십시오. 네가하는 방식이 이상해. 일반적으로 패스에 클립하려면'CGContextClip (path)'또는'- [UIBezierPath addClip :]'만 호출하면됩니다. 패스를 이미지로 변환 할 필요는 없습니다. –

+0

또한'context'는'UIGraphicsGetCurrentContext()'의 현재 컨텍스트입니까, 아니면 여러분이 만든 별도의 컨텍스트입니까? –

+0

고마워, 지금 그걸 들여다보고있다. 그것은 이미지를 마스킹하는 것과 같은 일을 수행 할 것인가? – thebradbain

답변

3

(예 : UIBezierPath을 사용합니다.) 사용자 지정보기에서 이미지를 자르거나 그 잘린 이미지 주위의 경로를 쓰다듬을 때 해당 경로를 사용할 수 있습니다.

unclipped clipped

당신이 터치로 경로를 그리려는 경우

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSaveGState(context); 

    if (self.isClipped) { 
     CGContextAddPath(context, [self.path CGPath]); 
     CGContextClip(context); 
    } 

    [self.image drawInRect:self.bounds]; 

    CGContextRestoreGState(context); 

    [[UIColor blackColor] setStroke]; 
    self.path.lineWidth = 4.0; 
    [self.path stroke]; 
} 

가 와서, 제가 개인적 통해 그 렌더링 할 별도의 CAShapeLayer (이미지의 불필요한 다시 그리기를 피하기 위해).

관련 문제