Класс System.Drawing.Graphics имеет свойство CompositionMode с двумя параметрами: SourceOver (который на основе альфа-компонента смешивает все, что нарисовано с уже существующим фоном) или SourceCopy, который просто перезаписывает фон тем, что рисуется.Изменить режим смешивания альфа в WPF?
Что-то подобное существует в WPF?
В WPF, когда я рисую PolyLine, например, поверх другого, новая PolyLine всегда имеет алфавит с фоном. Я думаю, что это не зависит от используемого контейнера. Я использую Canvas, но не могу найти свойство blend mode в любом месте. То, что я хочу сделать, - это то, что упоминает вышеописанный метод SourceCopy. То есть новая PolyLine должна просто перезаписать все, что уже есть на Canvas.
Есть ли простой способ сделать это, за исключением использования пиксельных шейдеров (которые, насколько я понимаю, не будут работать, потому что у меня нет доступа к буферному бланку Canvas).
Я не застрял на холсте и буду рад использовать любой контейнер, который поддерживает режим перезаписи.
В настоящее время у меня есть решение на основе WriteableBitmap, для которого я получаю контекст System.Drawing.Graphics, а затем манипулирую CompositionMode. Он работает, но поскольку мое окно полноэкранное, это решение имеет серьезные последствия для производительности.
Уточнение и пример: Окно WPF полностью прозрачно, а также Canvas (задний цвет земли (0,0,0,0)). Теперь я рисую PolyLine с Color.FromArgb (128,128,0,0). Теперь у меня полупрозрачная красная полилиния. Затем я рисую одну и ту же PolyLine с Color.FromArgb (0,0,0,0). Результат такой же, как и раньше, из-за происходящего альфа-смешивания. Тем не менее, я хочу, чтобы красная полилиния была стерта с помощью второй полилинии (это именно то, что делает режим SourceCopy в классе Graphics.
Да, но мне нужно переписать фон ЛЮБОЙ альфа-значением, даже 0. См. пояснения и пример, который я только что добавил к моему вопросу. – Harald