图像上的IOS线 - 可能反转颜色?

时间:2013-08-03 03:21:12

标签: ios uiimage

我在我的应用程序中在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

1 个答案:

答案 0 :(得分:2)

以下是两条建议:

  1. 在白线周围使用黑色阴影。看看CGContextSetShadowWithColor。如果您想在绘制线后绘制更多内容,也可能需要使用CGContextSaveGStateCGContextRestoreGState

  2. 将混合模式设置为kCGBlendModeDifferencekCGBlendModeExclusion。请参阅CGContextSetBlendMode