title: Label with smooth rounded corners
body: <p><a href="https://i.stack.imgur.com/a1QEb.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/a1QEb.jpg" alt="2 labels in windows form"></a></p>
  
  <p>Both labels have <code>AutoSize</code> true &amp; <code>TextAlign</code> MiddleCenter.</p>
  
  <p><strong>How can also label2 show smooth borders?</strong></p>
  
  <p>Here is the test code for handlers <code>Form.Load(...)</code> &amp; <code>Form.Paint(...)</code>:</p>
  
  <pre><code>int _cornerRadius = 10;
  Point _locationLabel2;
  
  // Form.Load(...)
  private void Form3_Load(object sender, EventArgs e)
  {
      // Step 1: Cut the label regions (seems to be ok, result is the same for both labels)
      GraphicsPath graphicsPath = _getRoundPath(label1.ClientRectangle, _cornerRadius);
      label1.Region = new Region(graphicsPath);
      graphicsPath = _getRoundPath(label2.ClientRectangle, _cornerRadius);
      label2.Region = new Region(graphicsPath);
  
      _locationLabel2 = this.PointToClient(label2.Parent.PointToScreen(label2.Location));
  }
  
  // Form.Paint(...)
  private void Form3_Paint(object sender, PaintEventArgs e)
  {
      using (Pen pen = new Pen(label1.BackColor, 3.0f))
      {
          // Step 2: Smooth the label borders (ok only for label1)
          _drawRoundedRectangle(e.Graphics, pen, label1.Location.X, label1.Location.Y, 
                                label1.ClientRectangle.Width, label1.ClientRectangle.Height, _cornerRadius);
          _drawRoundedRectangle(e.Graphics, pen, _locationLabel2.X, _locationLabel2.Y,
                                label2.ClientRectangle.Width, label2.ClientRectangle.Height, _cornerRadius);
      }
  }
  
  // Helper 1/3
  private static GraphicsPath _getRoundPath(Rectangle rectangle, int radius)
  {
      int x = rectangle.X;
      int y = rectangle.Y;
      int width = rectangle.Width;
      int height = rectangle.Height;
  
      radius = radius &lt;&lt; 1;
  
      GraphicsPath path = new GraphicsPath();
  
      if (radius &gt; 0)
      {
          if (radius &gt; height) radius = height;
          if (radius &gt; width) radius = width;
          path.AddArc(x, y, radius, radius, 180, 90);
          path.AddArc(x + width - radius, y, radius, radius, 270, 90);
          path.AddArc(x + width - radius, y + height - radius, radius, radius, 0, 90);
          path.AddArc(x, y + height - radius, radius, radius, 90, 90);
          path.CloseFigure();
      }
      else
      {
          path.AddRectangle(rectangle);
      }
  
      return path;
  }
  
  // Helper 2/3
  private void _drawRoundedRectangle(Graphics graphics, Pen pen, int x, int y, int width, int height, int radius)
  {
      RectangleF rectangle = new RectangleF(x, y, width, height);
      GraphicsPath path = _generateRoundedRectangle(graphics, rectangle, radius);
      SmoothingMode old = graphics.SmoothingMode;
      graphics.SmoothingMode = SmoothingMode.AntiAlias;
      graphics.DrawPath(pen, path);
      graphics.SmoothingMode = old;
  }
  
  // Helper 3/3
  private static GraphicsPath _generateRoundedRectangle(Graphics graphics, RectangleF rectangle, int radius)
  {
      GraphicsPath path = new GraphicsPath();
      float diameter = radius * 2.0F;
      SizeF sizeF = new SizeF(diameter, diameter);
      RectangleF arc = new RectangleF(rectangle.Location, sizeF);
  
      path.AddArc(arc, 180, 90); 
      arc.X = rectangle.Right - diameter;
      path.AddArc(arc, 270, 90);
      arc.Y = rectangle.Bottom - diameter;
      path.AddArc(arc, 0, 90);
      arc.X = rectangle.Left;
      path.AddArc(arc, 90, 90); 
      path.CloseFigure();
  
      return path;
  }
  </code></pre>
  
  <p><sub>Main code parts are from <a href="https://www.codeproject.com/kb/gdi-plus/extendedgraphicsii.aspx" rel="nofollow noreferrer">Arun Reginald Zaheeruddin</a></sub></p>