2014-05-21 6 views
0

UIImage에 그려진 선을 지우려고합니다. 빈 캔버스에 그려진 선을 성공적으로 삭제했습니다.UIBezirePath UIImage에서 그린 선을 제거하십시오.

UIImage에 그려지는 선을 지우는 방법은 무엇입니까? 다음은 시도했지만 올바른 지우개 효과를 얻을 수없는 몇 가지 사항입니다.

  1. 터치 포인트를 사용하여 그 지점에서 이미지의 RGB를 가져 와서 해당 색상 획을 사용했습니다.
  2. colorwithpatternimage이 너무 느립니다.

친절, 더 나은 솔루션

+0

이미지에. 알려지지 않은 것을 제거 할 수는 없습니다. –

+0

UIImage 위의 획을 지우고 싶습니다. –

+0

UIImage 객체의 일부가 아닌 경우에는 UIImage를 언급하는 것과 관련이 없습니다. 그 라인들은 CGContextRef 컨텍스트에있다. CGContextClearRect 함수를 사용할 수 있습니다. –

답변

1

제가 일반적으로 수행하는 (예를 들어, 말하는 CGBitmapContext) 오프 스크린 버퍼에 이미지를 그릴 수있다 제안 위에 베 지어 곡선을 그리고 스크린에 결과를 복사 .

베 지어 중 하나를 제거하려면 이미지를 오프 스크린 버퍼에 그려야하고 원하지 않는 베 지어 곡선을 제외한 모든 베 지어 곡선을 그린 다음 그 결과를 화면에 복사하십시오.

이미 화면 상에있는 요소를 지워서 발생할 수있는 깜박임을 피할 수있는 장점이 있습니다. 그리고 커브가 겹치는 경우 제대로 작동하지만 이미지를 패턴으로 그리면 모든 겹치는 점이 지워질 수 있습니다.


편집 : 여기에 몇 가지 의사 코드 (컴파일되지 않습니다 - 단지 메모리에서)입니다 무슨 뜻인지 설명하기는 :

-(UIImage*)drawImageToOffscreenBuffer:(UIImage*)inputImage 
{ 
    CGBitmapContextRef offscreen = CGBitmapContextCreate(...[inputImage width], [inputImage height]...); 
    CGImageRef cgImage = [inputImage CGImage]; 
    CGRect bounds = CGRectMake (0, 0, [inputImage width], [inputImage height]); 
    CGContextDrawImage (offscreen, bounds, cgImage); 
    // Now iterate through the Beziers you want to draw 
    for (i = 0; i < numBeziers; i++) 
    { 
     if (drawBezier(i)) 
     { 
      CGContextMoveToPoint(offscreen, ...); 
      CGContextAddCurveToPoint(offscreen, ...); // fill in your bezier info here 
     } 
    } 

    // Put result into a CGImage 
    size_t rowBytes = CGBitmapContextGetBytesPerRow(offscreen); 
    CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, CGBitmapContextGetData(offscreen), rowBytes * [inputImage height], NULL); 
    CGColorSpaceRef colorSpace = CGBitmapContextGetColorSpace(offscreen); 
    CGImageRef cgResult = CGImageCreate([inputImage width], [inputImage height], ..., dataProvider, NULL, false, kCGRenderingIntentDefault); 
    CGDataProviderRelease(dataProvider); 
    CGColorSpaceRelease(rgbColorSpace); 

    // Make a UIImage out of that CGImage 
    UIImage* result = [UIImage imageWithCGImage:cgResult]; 
    // Can't remember if you need to release the cgResult here? I think so 
    CGImageRelease(cgResult); 
    return result; 
} 
있는 UIImage 시각적으로 어떤 측면에서 자사의 이미지 내용에 대해 아무것도 모르는
+0

감사합니다. 어떤 예도 공유 할 수 있습니까? –

+0

위의 방법을 시도해보십시오. 몇 가지 세부 정보를 입력해야하며, 이는 주로 메모리에서 발생하므로 몇 가지 실수가있을 수 있습니다. – user1118321