1

我用图形画了一个椭圆/圆。当我在 WYSIWYG 编辑器中时,它是正确的尺寸。但是,当我运行程序时,圆圈变大了。

编辑器中正确大小的圆圈

太大的圆圈

“太大的圆”也具有较低的分辨率并且具有锯齿状边缘。

我怎样才能使它的大小相同?

    Protected Overrides Sub OnPaint(
    ByVal pEvent _
        As PaintEventArgs)

    Me.Size = New Size(heightWidth, heightWidth)
    'MyBase.OnPaint(pEvent)

    Dim CenterCircle _
        As New Rectangle(0, 0, heightWidth, heightWidth)


    Dim colorBigCircle As Color = Color.FromArgb(218, 227, 243)
    Dim colorSmallCircle As Color = Color.FromArgb(67, 99, 155)
    pEvent.Graphics.FillEllipse(
            New SolidBrush(
                colorBigCircle
                ),
            CenterCircle)
    pEvent.Graphics.DrawEllipse(
            New Pen(
                colorSmallCircle, 3
                ),
            CenterCircle)
4

2 回答 2

0

“太大的圆”也具有较低的分辨率并且具有锯齿状边缘。

    pEvent.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
于 2018-03-28T15:34:29.883 回答
0

在绘制事件中设置表单的大小是一个很大的禁忌。要么在设计器中设置窗体的尺寸,其窗体边框不那么大,要么将窗体的 MinimumSize 和 MaximumSize 设置为相同的尺寸。

您应该处理您的绘图对象。设置 SmoothingMode 将修复圆的锯齿状边缘。您的绘制代码应如下所示:

Protected Overrides Sub OnPaint(e As PaintEventArgs)
  MyBase.OnPaint(e)
  e.Graphics.SmoothingMode = SmoothingMode.AntiAlias

  Dim centerCircle As New Rectangle(0, 0, Me.ClientSize.Width, Me.ClientSize.Height)
  Dim colorBigCircle As Color = Color.FromArgb(218, 227, 243)
  Dim colorSmallCircle As Color = Color.FromArgb(67, 99, 155)
  Using br As New SolidBrush(colorBigCircle)
    e.Graphics.FillEllipse(br, centerCircle)
  End Using
  Using p As New Pen(colorSmallCircle, 3) With {.Alignment = PenAlignment.Inset}
    e.Graphics.DrawEllipse(p, centerCircle)
  End Using
End Sub
于 2018-03-28T15:49:49.120 回答