2011-12-23 26 views
1

我正在構建一個iPhone應用程序,它需要以非常特定的方式構建一些圖像。這個問題很難解釋,下面是我試圖達到的目標。基本上,我想「塗料桶」填充到UIImage(這將是一個PNG)。我認爲這裏的術語「油漆桶」將等同於色彩?從「顏料桶」中排除蒙面區域填充UIImage

之後,我想要創建一個遮罩對象(可以更新並且可以包含多個形狀),然後當我將另一個色調/油漆桶應用於原始圖像時,遮罩所覆蓋的區域將不受影響。基本上就像將一些膠帶纏繞在一個物體上,然後去除膠帶。如承諾的,這裏是我所追求的圖表。需要注意的是,儘管我在這裏使用了十字,但最終這些模式可能相當複雜,並且必須在PNG內部,而不是在代碼中創建。感謝您可能會給予的任何幫助!

Masking Flow

回答

0

爲白色背景上的黑色圖像創建交叉(或任何形狀你想要的)。使用CGContextClipToMask將其應用於圖形上下文。然後使用CGContextFillRect以藍色填充您的上下文邊界。像這樣的事情應該這樣做:

CGRect bounds = your context bounds; 
CGContextRef gc = your context; 
UIImage *cross = [UIImage imageNamed:@"cross"]; 
CGContextSaveGState(gc); { 
    CGContextClipToMask(gc, bounds, cross.CGImage); 
    CGContextSetColorWithColor(gc, [UIColor blueColor].CGColor); 
    CGContextFillRect(gc, bounds); 
} CGContextRestoreGState(gc); 
+0

感謝您的回覆@rob。對不起,我是這些C語句的新手(被困在簡單的舊應用程序中)。實際在屏幕上顯示這個渲染的下一步是什麼?此外,使用這種方法,是否也可以添加多個蒙版(也可能是十字,圓等)?另外,行CGContextSetColorWithColor(gc,[UIColor blueColor] .CGColor);導致編譯錯誤(「架構i386找不到ld:symbol(clang:error:linker command failed with exit code 1)」)。我用「CGContextSetRGBFillColor」替換它,但沒有顯示。 – NonatomicRetain 2011-12-23 19:37:06

+0

針對一個SO問題的問題太多。 – 2011-12-23 19:39:51

+0

另外它聽起來像你需要通過一個或兩個Quartz(核心圖形)教程。 http://stackoverflow.com/questions/3463256/what-are-some-great-quartz-2d-drawing-tutorials – 2011-12-23 19:41:09