2013-01-05 57 views
0

我確定這個答案存在於stackoverflow上,但我一直在尋找並且一直未能找到它。從本質上講,我有幾個透明背景圖像和一些黑色圖像,我希望能夠將黑色部分的顏色更改爲其他任意顏色。我想使用Quartz來製作一個不同顏色的單色圖像

我相對肯定這是可以實現的Quartz Image Masking,但我一直沒有找到任何好的例子,所以這就是我要找的。其他解決方案也很受歡迎。

謝謝!

更新:我覺得我很接近這個代碼...但我的面具不工作。儘管我的UIView填充了填充顏色,但它只是一個巨大的矩形,沒有任何限制。

更新#2:我現在更接近(我認爲)與下面的代碼。問題是我的背景現在是黑色的,而不是透明的。

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGContextScaleCTM(context, 1, -1); 
CGContextTranslateCTM(context, 0, -rect.size.height); 

CGImageRef maskImage = [self.image CGImage]; 
CGContextClipToMask(context, rect, maskImage); 

[_colorToChangeInto setFill]; 
CGContextFillRect(context, rect); 
+1

如果您在填充前剪切會發生什麼?剪輯僅影響您之後完成的繪圖。 –

+0

同樣的效果。只是一個填充顏色的大框。 – livingtech

+0

嗯。如果我擺脫了colorSpace BS,並直接使用圖像作爲蒙版,我得到的圖像接近我想要的,但背景是黑色的,而不是透明的。 (我需要翻轉座標,我可以通過CGContextScaleCTM(mainViewContentContext,1,-1); CGContextTranslateCTM(mainViewContentContext,0,-rect.size.height);'。)來解決這個問題。 ://stackoverflow.com/a/8351807/18961 – livingtech

回答

1

答案已經在上面的問題中。這不是很有效,因爲我在IB(在故事板)中創建圖像,並且沒有設置背景顏色。不知怎的,這默認爲黑色。這樣阻止!

無論如何,我將背景顏色更改爲透明後,下面的代碼就像一個魅力!

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGContextScaleCTM(context, 1, -1); 
CGContextTranslateCTM(context, 0, -rect.size.height); 

CGImageRef maskImage = [self.image CGImage]; 
CGContextClipToMask(context, rect, maskImage); 

[_colorToChangeInto setFill]; 
CGContextFillRect(context, rect); 
相關問題