GraphicsPath内向渐变填充

时间:2017-03-04 19:59:38

标签: c# graphics drawing gradient shape

我正在创建一个简单的DXF生成器(由CNC机器使用),它仅使用字母,我在使用 PathGradientBrush GraphicsPath 类时遇到问题。我正在使用 GraphicsPath 绘制一个字母的轮廓,之后我需要填充渐变的相应 GraphicsPath ,类似于此:
Letter "I" filled with gradient

如您所见,渐变需要从边缘开始,然后在中心过渡到白色。 这是我目前使用的代码:

  private void Form1_Paint(object sender, PaintEventArgs e) {
   e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
   e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
   e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;

   using(GraphicsPath Path = new GraphicsPath()) {
    Path.AddString("I", Font.FontFamily, (int) FontStyle.Regular, 250f, Point.Empty, StringFormat.GenericTypographic);
    using(Pen OutlinePen = new Pen(Color.Black, 1f)) {
     e.Graphics.DrawPath(OutlinePen, Path);
     using(PathGradientBrush FillBrush = new PathGradientBrush(Path)) {
      FillBrush.SurroundColors = new Color[] {
       Color.FromArgb(0, 0, 0),
       Color.FromArgb(51, 51, 51),
       Color.FromArgb(102, 102, 102),
       Color.FromArgb(173, 173, 173)
      };
      FillBrush.CenterColor = Color.FromArgb(255, 255, 255);
      e.Graphics.FillPath(FillBrush, Path);
     }
    }
   }
  }

,产生此输出:
enter image description here

另外,我尝试过使用 FocusScales ,但也没有成功。 在示例中显示了字母“I”,但这需要与所有字母一起使用。 任何帮助都非常感谢。

P.S。字母“N”作为参考,对不好的绘图感到抱歉,但这只是一个快速而肮脏的例子。这个字母需要填充5色渐变(从边缘的黑色到中间的白色),但要考虑字母宽度。如果有人感兴趣,则需要模拟CNC机床刀具路径的深度尺寸。白色 - 中间部分具有最大深度。

Letter N
整个字母应填充渐变,请放大以获得想法。

0 个答案:

没有答案