Использование GDI + для рисования различных цветов:
brush = new SolidBrush(color);
graphics.FillRectangle(brush, x, y, width, height);
Вы заметите, что непрозрачный цвет не отображается должным образом на стекле:
Как нарисовать сплошные цвета на стекле?
Вы также заметите, что полностью непрозрачный цвет обрабатывается по-разному в зависимости от того, какой он цвет:
Кто-нибудь может указать мне на документацию по композитору для настольных ПК, в которой объясняется, как обрабатываются разные цвета?
Вы также заметите, что FillRectangle
ведет себя иначе, чем FillEllipse
:
FillEllipse
с непрозрачным цветом рисует непрозрачный цвет FillRectangle
с непрозрачным цветом рисует частично (или полностью) прозрачным Пояснение за бессмысленное поведение, пожалуйста.
Alwayslearning предложило мне изменить режим наложения. С MSDN :
Перечисление CompositingMode
Перечисление CompositingMode определяет, как визуализированные цвета сочетаются с цветами фона. Это перечисление используется методами
Graphics :: GetCompositingMode
и 'Graphics :: SetCompositingMode' класса Graphics .CompositingModeSourceOver
Указывает, что при визуализации цвет смешивается с цветом фона. Смешивание определяется альфа-компонентом визуализируемого цвета.
CompositingModeSourceCopy
Указывает, что при визуализации цвета он перезаписывает цвет фона. Этот режим нельзя использовать вместе с TextRenderingHintClearTypeGridFit.
Судя по описанию CompositingModeSourceCopy
, это не тот вариант, который мне нужен. Судя по налагаемым ограничениям, это похоже на вариант, который мне нужен. И с отключенной композицией или прозрачностью не вариант, который мне нужен, поскольку он выполняет SourceCopy , а не SourceBlend :
К счастью, это не так. зло, которое я должен созерцать, потому что оно не решает мою настоящую проблему. После создания моего объекта graphics
я попытался изменить режим наложения:
graphics = new Graphics(hDC);
graphics.SetCompositingMode(CompositingModeSourceCopy); //CompositingModeSourceCopy = 1
Результат не повлиял на вывод: