我有一个灰度图像,我想用它来绘制 Cocoa 控件。图像具有不同的灰度级别。在最暗的地方,我希望它绘制最暗的指定色调。我希望它在源图像是白色的地方是透明的。
基本上,我想重现在 iPhone 上的 UINavigationBar 中看到的tintColor 的行为。
到目前为止,我已经探索了几种选择:
使用 SourceOver 合成在灰度图像上绘制色调颜色
-> 这需要非不透明的色调
-> 结果比预期的要暗得多
使用 CIMultiplyCompositing CIFilter 对图像进行着色
-> 我无法 [CIImage drawAtPoint:fromRect:operation:fraction:] 只绘制图像的一部分。 NSImage 同样可以正常工作
-> 我偶尔会遇到无法理解的崩溃
将灰度图像转换为蒙版。 IE。黑色应该是不透明的。白色应该是透明的。灰色应该具有中间的 alpha 值。
-> 这似乎是最好的解决方案
-> 尽管我尽我所能,但我无法实现这一点。
上述解决方案对我不起作用。但这个更简单的解决方案对我来说非常有用
- (NSImage *)imageTintedWithColor:(NSColor *)tint
{
NSImage *image = [self copy];
if (tint) {
[image lockFocus];
[tint set];
NSRect imageRect = {NSZeroPoint, [image size]};
NSRectFillUsingOperation(imageRect, NSCompositeSourceIn);
[image unlockFocus];
}
return image;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)