Как вы можете сделать собственный рисунок, но с маской? - PullRequest
2 голосов
/ 17 декабря 2011

У нас есть элемент управления, который мы делаем в CustomRender. Тем не менее, мы хотели бы использовать PNG с прозрачностью как трафарет для различных «проходов» чертежей, если хотите.

Теперь мы уже знаем, что мы можем просто использовать PNG в ImageBrush и установить его как OpacityMask элемента управления, но на самом деле мы хотим сделать несколько проходов рисования с несколькими различными трафаретами. Если бы мы хотели пойти по пути OpacityMask, нам пришлось бы создать отдельные элементы управления, отдельные ImageMasks, а затем сложить их все друг на друга, что также загромождает ваше визуальное дерево.

Мы не хотим этого делать. Мы хотим сделать все рисование в переопределении OnRender одного подкласса Control. Мы просто хотим, чтобы эти вызовы были замаскированы изображением. Затем мы хотим повторять это снова и снова, пока наше рисование не будет завершено.

Как это можно сделать?

1 Ответ

1 голос
/ 17 декабря 2011

ХА! Нашел это! Странно, что сообщество S / O было настолько тихим на этом, но для тех, кто ищет его, оно называется DrawingContext.PushOpacityMask (и соответствующий 'Pop ()') и делает именно то, что вы думаете, оно делает ... оно толкает маска непрозрачности (с помощью кисти) на DC и весь последующий рисунок относительно значений непрозрачности кисти.

Вы также можете накладывать «маски» для некоторых довольно крутых эффектов. Они аддитивны, а не только последний набор.

Я почти уверен, что встроенная OpacityMask просто используется с этой функцией в вызове OnRender. Это означает, что вы по-прежнему можете использовать OpacityMask (при условии, что сначала вы его нажмете), а затем свои собственные маски для собственных вызовов рисования. Довольно аккуратные вещи!

Надеюсь, это поможет другим, кто искал это.

...