1

我在我的应用程序中的 UIImage 上画了一条线。我希望线条与它所绘制的背景颜色“不同”。如果图像中有白色区域,如果在其顶部绘制线条,则它不应该是白色的。这很容易实现吗?

现在我使用白色作为线条。下面的代码:

[myImage drawInRect:CGRectMake(0,0,200,200)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 1.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(),1,1,1, 1.0);//RGB all 1)
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), pt1.x, pt1.y);  // pt1 -start point
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), pt2.x, pt2.y); // pt2 - end point

如您所见,我使用 1,1,1 在图像顶部从点 pt1 到 pt2 获得白线。当它被绘制在“myImage”的白色区域时,这条线变得不可见。我也想让它在白色之上以某种方式可见。我怎样才能做到这一点?

不确定这个论坛上是否已经有答案。但是找不到这样的东西。

在此先感谢您的帮助

编辑

@rob mayoff 的回答对我来说是完美的。
这是我的最终代码,以供查看此处的任何人使用:

[myImage drawInRect:CGRectMake(0,0,200,200)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 1.0);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(),1,1,1, 1.0);//RGB all 1)

CGContextSetShadowWithColor(UIGraphicsGetCurrentContext(), CGSizeMake(2.0f, 2.0f), 1.0f,
     [[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:.6] CGColor]);
//CGContextSetBlendMode(UIGraphicsGetCurrentContext(),kCGBlendModeExclusion);
//CGContextSetBlendMode(UIGraphicsGetCurrentContext(),kCGBlendModeDifference);

CGContextMoveToPoint(UIGraphicsGetCurrentContext(), pt1.x, pt1.y);  // pt1 -start point
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), pt2.x, pt2.y); // pt2 - end point
4

1 回答 1

2

这里有两个建议:

  1. 在白线周围使用黑色阴影。看看CGContextSetShadowWithColor。如果您想在画线后画更多东西,您可能还想使用CGContextSaveGStateand 。CGContextRestoreGState

  2. 将混合模式设置为kCGBlendModeDifferencekCGBlendModeExclusion。见CGContextSetBlendMode

于 2013-08-03T03:41:47.317 回答