Rounded Rectangle Not Accurate

Каждый пример кода I ' Когда-либо обнаруженный нами для рисования прямоугольников с закругленными углами с использованием GDI + выглядит примерно так (поднято и немного изменено по сравнению с BobPowell.net):

  Private Sub Panel1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles Panel1.Paint
    e.Graphics.Clear(SystemColors.Window)
    e.Graphics.SmoothingMode = SmoothingMode.None

    Call DrawRoundRect(e.Graphics, Pens.Red, 10, 10, 48, 24, 6)
  End Sub

  Public Sub DrawRoundRect(ByVal g As Graphics, ByVal p As Pen, ByVal x As Single, ByVal y As Single, ByVal width As Single, ByVal height As Single, ByVal radius As Single)
    Using gp As New GraphicsPath()
      gp.StartFigure()
      gp.AddArc(x + width - radius, y, radius * 2, radius * 2, 270, 90)
      gp.AddArc(x + width - radius, y + height - radius, radius * 2, radius * 2, 0, 90)
      gp.AddArc(x, y + height - radius, radius * 2, radius * 2, 90, 90)
      gp.AddArc(x, y, radius * 2, radius * 2, 180, 90)
      gp.CloseFigure()
      g.DrawPath(p, gp)
    End Using
  End Sub

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

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

enter image description here

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

Есть ли способ нарисовать прямоугольник с закругленными углами лучше, чем этот в старых добрых winforms?

8
задан LarsTech 6 July 2011 в 16:35
поделиться