Как реализовать ластик в простом графическом редакторе?

Я хочу создать простой графический редактор на iOS, в котором я использую контекст растровой графики и пути Безье для преобразования строк в изображения.

Я не нашел способ создать ластик.

У тебя есть идеи?

- (void)drawRect:(CGRect)rect {
    [[UIColor blackColor] setStroke];

    CGContextRef aRef = UIGraphicsGetCurrentContext();

    aPath.lineWidth = 5;
    [aPath stroke];
    [[[UIColor blackColor] colorWithAlphaComponent:0] setStroke];
    bPath.lineWidth = 5;
    [bPath stroke];
   movesss= CGBitmapContextCreateImage(aRef);
    if (movesss==NULL) {
        NSLog(@"null =(");
    }
}

-(void)moveTo:(CGPoint)pos {
    if(del){
        [bPath moveToPoint:pos];
    }
    else{
        [aPath moveToPoint:pos];
    }
}

-(void)cret{
    aPath=[[UIBezierPath bezierPath] retain];
    bPath=[[UIBezierPath bezierPath] retain];
    del=NO;
}

-(void)lineTo:(CGPoint)pos {
    if(del){
        [bPath addLineToPoint:pos];
    }
    else{
        [aPath addLineToPoint:pos];
    }
    [self setNeedsDisplay];
}

-(void)imgf{
    UIImage *imageToSave=[[UIImage imageWithCGImage:movesss] retain];

   UIImageWriteToSavedPhotosAlbum(imageToSave, nil, nil, nil);
    UIImageView *trew=[[UIImageView alloc] initWithFrame:[self frame]];
    [trew setBackgroundColor:[UIColor greenColor]];
    [trew setImage:imageToSave];
    [self addSubview:trew];
}

-(void)swittch{
    del=!del;
}


Что здесь не так?


person Riddick    schedule 07.09.2011    source источник


Ответы (2)


Вы можете реализовать ластик в виде пера, которое рисует полностью прозрачным цветом (установите альфа-канал равным нулю). UIColor обладает "альфа- " параметр, который можно задать при создании с помощью colorWithAlphaComponent: например.

Или просто используйте UIColor * color = [UIColor clearColor];

РЕДАКТИРОВАТЬ:

Я думал, что рисование с помощью clearColor заменит пиксели чистыми пикселями. Это было глупое рассуждение, поскольку рисование несколько раз альфа-красками не работало бы должным образом, если бы это было так.

Согласно этому вопросу, прозрачные цвета не подходят для этой цели. Вам нужно знать цвет фона и рисовать им. Если ваш цвет фона "прозрачный"... Я в недоумении.

person Kheldar    schedule 07.09.2011
comment
Я последовал вашему совету, но это не работает: линии все еще черные. - person Riddick; 07.09.2011
comment
Спасибо за ссылку. Мой цвет фона прозрачный. Мне просто нужно было изменить режим наложения следующим образом: CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeCopy); - person Riddick; 08.09.2011

Рисование фоновым цветом будет работать как ластик.

person Vinner    schedule 25.08.2012