제가 일반적으로 수행하는 (예를 들어, 말하는 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 시각적으로 어떤 측면에서 자사의 이미지 내용에 대해 아무것도 모르는
이미지에. 알려지지 않은 것을 제거 할 수는 없습니다. –
UIImage 위의 획을 지우고 싶습니다. –
UIImage 객체의 일부가 아닌 경우에는 UIImage를 언급하는 것과 관련이 없습니다. 그 라인들은 CGContextRef 컨텍스트에있다. CGContextClearRect 함수를 사용할 수 있습니다. –