【问题标题】:Drawing in UIView on touch points gives blurr drawing effect on boundaries在 UIView 中的触摸点上绘图会在边界上产生模糊的绘图效果
【发布时间】:2015-08-22 21:55:37
【问题描述】:

为了解决我的最后一个问题:Draw/Paint like sketch color inside a bezier path in UIView,我拍摄了一张用选定颜色填充的精确图像(路径)。然后,在UIView 中绘制它,对于上下文颜色,我采用了:

lineColor=[UIColor colorWithPatternImage:img];

在drawrect中:

CGPoint mid1 = midPoint(previousPoint1, previousPoint2);
CGPoint mid2 = midPoint(currentPoint, previousPoint1);
[curImage drawInRect:CGRectZero];
CGContextRef context = UIGraphicsGetCurrentContext();
[self.layer renderInContext:context];
CGContextMoveToPoint(context, mid1.x, mid1.y);
CGContextAddQuadCurveToPoint(context, 
                             previousPoint1.x, 
                             previousPoint1.y, 
                             mid2.x, 
                             mid2.y);
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetBlendMode(context, kCGBlendModeCopy);
CGContextSetLineJoin(context, kCGLineJoinRound);
CGContextSetLineWidth(context, self.lineWidth);
CGContextSetStrokeColorWithColor(context,lineColor.CGColor);
CGContextSetShouldAntialias(context, YES);
CGContextSetAllowsAntialiasing(context, YES);
CGContextSetFlatness(context,0.5);
CGContextSetAlpha(context, 1.0);
CGContextStrokePath(context);

它准确地绘制在视图路径上,但在边界上,颜色会像融化效果一样消失。

必须填充颜色的源图像:

用作colorWithPatternImage的图像(img)

触摸后,结果图像:

我在这里缺少什么来完美地填充它? 任何有关核心图形的帮助都非常受欢迎! 谢谢!

为了掩盖我也做过的图像:

-(void)clipView :(MyUIBezierPath*)path drawingView:(DrawingView*)myView
{
    MyUIBezierPath *myClippingPath =path;
    CAShapeLayer *mask = [CAShapeLayer layer];
    mask.path = myClippingPath.CGPath;
    myView.layer.mask = mask;
}

但是 colorWithPatternImage 和这个遮罩有同样的作用,即让我只在路径内绘制,我现在面临的问题是:它对在路径边界周围的触摸点上绘制产生不好的影响!

【问题讨论】:

  • 如果您不将剪贴蒙版应用到图层,那么您只会看到它在贝塞尔曲线内绘制。见stackoverflow.com/questions/20410146/…
  • 我都试过了。这个问题是一样的,边界周围的颜色仍然感觉像流动,但不是在外面,从里面流出路径的边界。问题是触摸时绘制点,掩蔽不是问题。
  • 关闭抗锯齿也一样吗?
  • 是的,我试过了:CGContextSetShouldAntialias(context, NO); CGContextSetAllowsAntialiasing(上下文,否);但这也无济于事!

标签: ios objective-c uiview core-graphics calayer


【解决方案1】:

好吧,它通过 colorWithPatternImage 与我自己的遮罩方法一起使用,尽管通过剪切来遮罩它是一回事。绘图问题是因为在方法“calculateMinImageArea:CGPoint1 :CGPoint2 :CGPoint3”中在触摸点绘制图像。更改其尺寸(根据线宽的高度-宽度)对其进行排序。

【讨论】:

    【解决方案2】:

    您可以从此图像创建路径点。然后制作一个CGPathRefCGMutablePathRef,然后将其用作CGContextRef 的掩码。

    【讨论】:

    • 从哪个图像创建路径?
    • 您最先发布的源图片。
    • 我已经存储了路径,只有我得到了第二个图像。关注的是不断调用触摸移动边界,颜色开始流出。请参阅我的链接问题以了解我是如何在 drawRect 中绘制它的。
    • 如果你有路径,那么你可以尝试像我上面的回答一样屏蔽。
    • 正如我所提到的,遮罩现在不是问题,以这种方式遮罩或获取图像并使用 colorwithpatternimage 完成相同的任务,问题在于绘制技术!在路径内它工作正常,但在边界上,在移动触摸时,它会产生一种颜色流动的效果,就像你在最后一张图片中看到的那样!
    猜你喜欢
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多