2013-08-03 41 views
1

我在我的應用程序的UIImage上畫了一條線。我想要這條線是一個來自它正在繪製的背景的「不同的」顏色。如果圖像中有白色區域,如果線條在其上面繪製,則不應該是白色。這容易實現嗎?圖像上的IOS行 - 反轉顏色可能嗎?

現在我使用白色作爲線條。下面的代碼:

[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的回答對我來說wroked完美。
這裏是我的人的期待在這裏的好處最終代碼:

[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 

回答

2

這裏有兩個建議:

  1. 使用黑色的影子在你的白線。看看CGContextSetShadowWithColor。如果你想繪製線後畫更多的東西,你也可能想要使用CGContextSaveGStateCGContextRestoreGState

  2. 將混合模式設置爲kCGBlendModeDifferencekCGBlendModeExclusion。見CGContextSetBlendMode

+0

比你了。它工作完美。所有三個(setshadow,BlendModeDifference和BlendModeExclusion)工作正常。我選擇了setShadow,因爲它更適合我的網頁。我已經將最終代碼添加爲我的問題編輯。再次感謝您的幫助 – zolio