2012-02-19 48 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