Самый простой способ нарисовать NSImage затемненным (как отключенное представление) - PullRequest
5 голосов
/ 25 ноября 2010

Если я не особо беспокоюсь о точном тоне и т. Д. Затемненного изображения, есть ли быстрый и грязный способ нарисовать NSImage слегка затемненным, как это?Я искал в Интернете и не могу найти то, что искал (но я не очень хорош в понимании графики и правильных технических терминов).

Non-dimmed Dimmed

На самом деле я приглушаю значки для того же варианта использования, что и значки приглушения XCode, как указано выше (т. Е. Документ содержит несохраненные изменения).

1 Ответ

16 голосов
/ 25 ноября 2010

Это прекрасно работает для меня:

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];

В основном я добавляю черный слой с непрозрачностью 33% поверх фактического значка (маскируя его с помощью NSCompositeSourceAtop).А потом я просто рисую затемненный значок с непрозрачностью 75%.

[Редактировать: избавился от временного черного изображения с помощью NSRectFillUsingOperation (...), как советует Николай Рухе ]

...