ios - 无法像橡胶一样擦除UIImage

时间:2012-07-04 11:23:22

标签: objective-c opengl-es quartz-graphics core-image

在我的应用程序中,我有两个视图一个在另一个之上。我在下面的视图我有一个捕获的图像,在上面的视图中我已经放置了一个图像。如果用户需要在上面的图像中进行一些更改,我可以选择删除图像。

一切正常,问题是,如果我试图擦除图像,它似乎是一个破碎的。图像不会以温和的方式删除。当我擦除它看起来像下面的那个。 Here I get The erased Image

我希望它如下 enter image description here

怎么做,请帮帮我

以下是我的代码:

UIGraphicsBeginImageContext(frontImage.frame.size);
        [frontImage.image drawInRect:CGRectMake(0, 0, frontImage.frame.size.width, frontImage.frame.size.height)];
        CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
        CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 10);
        CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1, 0, 0, 10);
        CGContextBeginPath(UIGraphicsGetCurrentContext());
        CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
        CGContextClearRect (UIGraphicsGetCurrentContext(), CGRectMake(lastPoint.x, lastPoint.y, 50, 50));
        CGContextStrokePath(UIGraphicsGetCurrentContext());
        frontImage.image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

2 个答案:

答案 0 :(得分:1)

问题是你正在使用方形画笔,并且你只是在用户绘制的线条上的一个点上擦除那个方块。此外,您的笔触颜色完全错误。

看起来您正试图将笔划设置为清晰的颜色,并在前一点和当前点之间画一条线。如果你想这样做,你应该这样做:

CGContextRef currCtx = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor (currCtx, 0, 0, 0, 0);
CGContextMoveToPoint (currCtx, startPt.x, startPt.y);
CGContextLineToPoint (currCtx, endPt.x, endPt.y);

在这种情况下,startPt.x / y是上一次触摸的位置,endPt.x / y是当前触摸。

请注意,要获得与您发布的图片一样漂亮的线条,您需要实际使用抗锯齿纹理并在线条的每个点绘制它,从而改变其大小。但是上面的内容应该会让你看起来很不错。

答案 1 :(得分:0)

UIGraphicsBeginImageContext(imageView1.frame.size);
[imageView1.image drawInRect:CGRectMake(0, 0,imageView1.frame.size.width, imageView1.frame.size.height)];
CGContextSetBlendMode(UIGraphicsGetCurrentContext( ),kCGBlendModeClear);
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext( ), 25.0);

CGContextSetStrokeColorWithColor(UIGraphicsGetCurrentContext(), [[UIColor clearColor] CGColor]);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), point.x, point.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), point.x, point.y);
CGContextStrokePath(UIGraphicsGetCurrentContext()) ;

imageView1.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();