2

在我的应用程序中,我有两个视图,一个在另一个之上。在下面的视图中,我有一个捕获的图像,在上面的视图中我放置了一个图像。如果用户需要对上面的图像进行一些更改,我会为他们提供删除图像的选项。

一切正常,问题是如果我试图擦除图像,它似乎是一个损坏的图像。图像不会以温和的方式被删除。当我擦除它看起来像下面的。 在这里我得到了删除的图像

我希望它如下 在此处输入图像描述

如何做到这一点,请帮助我

以下是我的代码:

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();
4

2 回答 2

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 是当前触摸。

请注意,要使线条与您发布的图片中一样漂亮,您需要实际使用抗锯齿纹理并沿线条的每个点绘制它,并改变其大小。但是上面的内容应该能让你得到一些看起来不错的可行的东西。

于 2012-07-04T14:45:05.363 回答
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();
于 2016-05-14T10:01:00.713 回答