有没有办法在Cocoa中动态创建彩色填充图案?
特别是通过
而不是使用图像文件中的固定模式NSColor *fillPattern = [NSColor colorWithPatternImage:patternImage];
我想通过在运行时动态选择合适的颜色来创建模式。 背景是通过在其上面呈现“相反”颜色的条纹或正方形来突出显示彩色对象 - 无论相反在这种情况下可能意味着什么,但这是一个不同的故事..
在绘图应用程序中应用于潜在的数百个对象时,它需要是一个相当快速的方法,因此我认为只需交换 patternImage 中的颜色就不够好了。
(它在QuickDraw中确实可以正常工作..!)
答案 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中执行此操作。