2012-02-19 46 views
3

有沒有辦法在Cocoa中動態創建彩色填充模式?即時創建模式?

特別地,而不是使用從圖像文件的固定圖案經由

NSColor *fillPattern = [NSColor colorWithPatternImage:patternImage]; 

我想通過在運行時動態地選擇適當的顏色,以產生圖案。 背景是在它的上面繪製的條紋或方格的「」「相對」顏色突出了色彩的物體 - 無論相反可能在這方面的意思,但是這是一個不同的故事..

被應用到可能數百個繪圖應用程序中的對象,它需要一個相當快的方法,所以我想只是交換顏色patternImage將不夠好。

它確實工作得很好,回來的QuickDraw ..!

回答

5

爲什麼不直接畫到內存中的圖像,並使用你的模式呢?

NSImage* patternImage = [[NSImage alloc] initWithSize:someSize]; 
[patternImage lockFocus]; 
//draw your pattern 
[patternImage unlockFocus]; 
NSColor* patternColor = [NSColor colorWithPatternImage:patternImage]; 
//do something with the pattern color 
//remember to release patternImage if you're not using ARC 

性能明智的,你通常應該看通過關注於通過RECT到drawRect:,並確保你只畫什麼是必要的優化畫圖。如果你這樣做,那麼我看不到模式繪製性能是一個主要問題。

+0

啊,應該有這個想法!這可能是要走的路。乾杯! – Jay 2012-02-20 14:53:24

1

背景被渲染的條紋或方格的「」「相對」在它上面的顏色突出了色彩的物體 - 無論相反可能會在這方面的意思,但是這是一個不同的故事..

您需要使用Quartz's blend modes之一(其中大部分都出現在Photoshop,Pixelmator和Opacity中,因此您可以在其中一個應用中進行試驗以確定您需要哪一個)。

然後,您應該可以填充靜態圖像 - 或a dynamic pattern,如果確實需要的話 - Quartz會將其適當地混合。

單獨在AppKit中沒有辦法做到這一點;你需要從the current NSGraphicsContextget a CGContext,並在石英做。

+0

感謝您指出,我想我會嘗試,如果更直接的NSImage方法不適合我們的需求。 – Jay 2012-02-20 14:54:25