System.Windows.Media.DrawingContext.DrawImage (), показывающий белые пиксели вместо черного в полупрозрачных областях, таких как тени - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть подкласс WPF Button, который переопределяет OnRender () для рисования одного из нескольких растровых изображений в зависимости от текущего состояния.Упрощенный (1-битовый) код показан ниже ...

    protected override void OnRender(DrawingContext context)
    {
        context.DrawImage(_MyBitmapSource, new Rect(0, 0, Width, Height));
    }

Полупрозрачные черные пиксели теней в каждом растровом изображении неправильно отображаются как полупрозрачный белый.

Аналогичным образом, если я установил одно из этих изображений в качестве кисти фона, произойдет то же самое.

Для элементов управления изображением установка того же изображения на Источник выглядит правильно, поэтому я знаю, что WPF способен правильно рисовать тени.Я явно что-то упускаю - возможно, что-то еще, что нужно установить в OnRender () перед вызовом DrawImage ().

В изображениях PNG нет ничего особенного.Просто чтобы быть уверенным, что это не проблема, я скачал несколько изображений PNG с images.google.com, и у них у всех была одна и та же проблема.

1 Ответ

0 голосов
/ 20 сентября 2019

В других средах такие события, как Paint или Render, обычно используются для изменения внешнего вида элементов управления.

WPF имеет элементы управления без внешнего вида - вы можете создать шаблон элемента управления wpf, чтобы он представлял собой практически все, что вы можете себе представить.Это довольно умопомрачительно, чрезвычайно мощно и делает некоторые вещи намного проще, чем они были бы в тех других структурах.

Следовательно, «традиционный» подход wpf к созданию изображения, которое имеет поведение кнопки, простоустановить шаблон кнопки для изображения.Затем вы можете установить источник изображений по коду или разметке.Markkup обычно предпочитают разработчики WPF, и у вас есть несколько вариантов, включая триггеры данных, триггеры, шаблоны и визуальные состояния.

Другие преимущества этого подхода состоят в том, что разметка позволяет сразу получить представление о том, что произойдет, и вы можетедовольно легко упростить его для устранения неполадок.

...