Что я обычно делаю, так это рисую изображение в закадровый буфер (например, 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;
}
person
user1118321
schedule
21.05.2014