即时创建模式?

时间:2012-02-19 15:45:48

标签: cocoa core-graphics

有没有办法在Cocoa中动态创建彩色填充图案?

特别是通过

而不是使用图像文件中的固定模式
NSColor *fillPattern = [NSColor colorWithPatternImage:patternImage];

我想通过在运行时动态选择合适的颜色来创建模式。 背景是通过在其上面呈现“相反”颜色的条纹或正方形来突出显示彩色对象 - 无论相反在这种情况下可能意味着什么,但这是一个不同的故事..

在绘图应用程序中应用于潜在的数百个对象时,它需要是一个相当快速的方法,因此我认为只需交换 patternImage 中的颜色就不够好了。

它在QuickDraw中确实可以正常工作..!

2 个答案:

答案 0 :(得分: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

在性能方面,你通常应该注意优化绘图,注意传入drawRect:的矩形并确保你只画出必要的东西。如果你这样做,那么我看不出图案绘制性能是一个主要问题。

答案 1 :(得分:1)

  

背景是通过在其上面呈现“相反”颜色的条纹或正方形来突出显示彩色对象 - 在这种情况下可能意味着相反的情况,但这是一个不同的故事..

您需要使用Quartz's blend modes中的一个(其中大多数都出现在Photoshop,Pixelmator和Opacity中,因此您可以在其中一个应用中进行试验,以确定您需要哪个应用)。

然后,您应该能够填充静态图像 - 或a dynamic pattern,如果它确实是必要的 - 并且Quartz将适当地混合它。

单独在AppKit中无法做到这一点;您需要get a CGContext the current NSGraphicsContext并在Quartz中执行此操作。