Матовая стальная щетка в WPF?

Я ищу идеи для создания кисти WPF с матовым стальным внешним видом, похожей на стиль MacOSX Panther, желательно без использования ImageBrush. Есть ли интересный способ использовать GradientBrush для создания этого эффекта?

Заранее спасибо!


person Jens    schedule 19.08.2010    source источник
comment
Есть ли причина, по которой вы не хотите использовать ImageBrush? Я не думаю, что есть простой способ сделать это с другими кистями...   -  person Thomas Levesque    schedule 19.08.2010
comment
@Thomas: я подозревал это. ImageBrush плохо масштабируется, не так ли? В идеале кисть будет выглядеть одинаково как на моем рабочем столе с разрешением 96 точек на дюйм, так и на моем встроенном устройстве с разрешением 200 точек на дюйм. Но если вы знаете учебник о том, как создать подходящее изображение, я бы тоже оценил его =)   -  person Jens    schedule 19.08.2010


Ответы (2)


Я не знаю, как легко это сделать с помощью программных кистей, но когда я использовал Photoshop для создания эффекта матовой стали, я, по сути, создал шум, а затем размазал (размыл) его в направлении кисти:

http://www.adamdorman.com/tutorials/brushed_steel_tutorial.php

Как кто-то упомянул в комментариях, вы можете сделать это и создать какую-то (повторяющуюся?) кисть изображения. Если вы хотите, чтобы ваш эффект матовой стали генерировался программно, вы можете написать средний фильтр, который сделает размытие за вас. Генерировать шум достаточно просто :)

Пример реализации среднего фильтра:

http://homepages.inf.ed.ac.uk/rbf/HIPR2/mean.htm

Измените это, чтобы получить матрицу Nx1, или маленькое (ноль) для весов, не входящих в текущую строку, и вы получите горизонтальное размытие.

person Merlyn Morgan-Graham    schedule 20.08.2010
comment
Спасибо за ответ! Это было бы непросто воспроизвести как кисть WPF, но, возможно, стоит попробовать. Оставлю вопрос открытым на некоторое время =) - person Jens; 23.08.2010

Вы можете использовать повернутую LinearGradientBrush со многими GradientStops в разных оттенках серого. Ну, это хотя бы подход. Чтобы он был масштабируемым, вам каким-то образом нужно было бы сделать GradientStops шириной всего в один пиксель, что, вероятно, требует указания размера заполненного объекта для кисти, я думаю. Это может стать трудной задачей, но ведь это судьба настоящего хакера, не так ли?

person Hendrik Wiese    schedule 20.08.2010