绘制NSImage的最简单方法变暗(如禁用视图)

d11*_*wtq 5 macos cocoa objective-c nsimage

如果我对阴暗图像的确切色调等不是很挑剔,是否有一种快速而肮脏的方式来绘制一个稍微暗淡的NSImage,就像这样?我在网上搜索过,无法真正找到我想要的东西(但在理解图形和正确的技术术语方面我不是很好).

非调光 变灰

我实际上调整了与上面的Xcode调光图标相同的用例的图标(即文档有未保存的更改).

Reg*_*ent 16

这对我来说很好:

NSImage *iconImage = [NSImage imageNamed:@"Icon"];
NSSize iconSize = [iconImage size];
NSRect iconRect = NSMakeRect(0.0, 0.0, iconSize.width, iconSize.height);
[iconImage lockFocus];
[[NSColor colorWithCalibratedWhite:0.0 alpha:0.33] set];
NSRectFillUsingOperation(iconRect, NSCompositeSourceAtop);
[iconImage unlockFocus];
[iconImage drawInRect:iconRect
              fromRect:iconRect
             operation:NSCompositeSourceOver
              fraction:0.75];
Run Code Online (Sandbox Code Playgroud)

基本上我是在实际图标的顶部添加一个33%不透明度的黑色图层(用它掩盖NSCompositeSourceAtop).然后我只是绘制了不透明度为75%的暗淡图标.

[编辑:根据Nikolai Ruhe的建议,使用NSRectFillUsingOperation(...)摆脱临时黑色图像]