Как нарисовать градуированную границу на многоугольнике, используя GDI + через C # / WinForms? - PullRequest
2 голосов
/ 07 апреля 2010

У меня есть многоугольники разных форм и размеров. Они имеют сплошную заливку и в настоящее время сплошную границу.

Я хотел бы задать градиентам полигонов на их краях, чтобы смягчить их.

До сих пор я пытался использовать Pen с LinearGradientBrush, и хотя эффект, который он дает, очень интересен, он определенно не тот, который я хочу;)

Я просмотрел пространство имен System.Drawing.Drawing2D, но, похоже, не было других классов, подходящих для этой цели.

У меня был поиск вокруг, и статьи, которые я могу найти, в основном о создании границ для прямоугольников, которые намного проще или неактуальны.

Итак, подведем итог: есть ли у кого-нибудь способ рисовать градиентную границу на многоугольнике, используя GDI +?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2010

Может быть, вам поможет снимок экрана с вашей предыдущей попыткой и макет того, что вы хотели бы?

Хотя я подозреваю, что проблема, с которой вы сталкиваетесь, заключается в том, что направление и смещение градиента одинаковы по всей фигуре и не изменяются с ориентацией линий многоугольника.

Взглянули ли вы вместо этого на PathGradientBrush ? ( Примеры ) Если вы не можете добиться эффекта, используя его с ручкой для обводки фигуры, возможно, вы могли бы сделать это с двумя «заливками», причем первая (граница) немного больше, чем вторая (интерьер).

1 голос
/ 08 апреля 2010

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

Я делаю следующее:

  1. Нарисуйте текст (в вашем случае: многоугольник) в растровое изображение
  2. Примените смягчающий фильтр только к альфа-каналу
  3. Повторите шаг 2 столько раз, сколько необходимо для получения желаемой ширины градиента
  4. Наконец, нарисуйте результат на результирующем растровом изображении / экране
...