2010-04-07 46 views
2

我有不同形状和大小的多边形。他们有一个坚实的填补,目前是一个坚实的边界。如何使用GDI +通过C#/ WinForms在多边形上绘制渐变边框?

我想给多边形的边缘上的渐变来软化它们。

到目前为止,我已经使用了LinearGradientBrush和,而它产生的效果Pen是非常有趣的是最肯定不是我想要的审判;)

我已经通过System.Drawing.Drawing2D命名空间看了,但有没”似乎是任何其他适用于此目的的类别。

我已经搜索过了,我可以找到的文章主要是关于为矩形创建边框,这些边框很容易,或者是无关紧要的。

所以总结一下,有没有人有办法使用GDI +在多边形上绘制渐变边框?

回答

2

也许屏幕截图显示了你以前的尝试产生了什么,并且模拟了你想要的帮助?

虽然我怀疑你遇到的问题是梯度的方向和偏移在整个形状中是一致的,并且不会随着多边形的线的方向而改变。您是否看过PathGradientBrush? (Examples)如果你无法达到效果,使用它的笔形状的笔画,也许你可以做两个“填充”,第一个(边框)略大于第二个(内部) 。

+0

是的,与LinearGradientBrush的问题梯度停留在相同的对齐方式,因此不遵循多边形的边缘。 PathGradientBrush可能可以完成这项工作,但通常是在一个多边形而不是边界上放置一个渐变,所以要使用它,我必须使用一种算法来扩大多边形,以便将边框固定在边界内。 我目前正在寻找使用PathGradientBrush,但它给我一个“内存不足”的异常3点多边形,这不鼓励。 我会坚持下去,谢谢你的建议:) – AndyJ 2010-04-07 13:47:38

1

我想我已经完成了你所要求的,但在我的情况下,我用它来创建文字上的柔和阴影。

我做到以下几点:

  1. 绘制文本(你的情况: 多边形)的位图
  2. 在阿尔法 通道仅
  3. 迭代第2步套用 软化过滤器 多次需要获得所需的 渐变宽度
  4. 最后将 结果绘制到结果 位图/屏幕