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