Почему круг, который я нарисовал, больше, чем ожидалось?

Я нарисовал эллипс / круг с графикой. Это правильный размер, когда я в редакторе 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)

2 ответа

"Слишком большой размер круга" также имеет более низкое разрешение и неровные края.

    pEvent.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality

Установка размера формы в событии рисования является большой нет-нет. Либо задайте размеры формы в конструкторе с границей формы, которая не имеет значительного размера, либо установите для 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
Другие вопросы по тегам