GDI +使用大坐标值水平翻转椭圆

时间:2015-01-24 18:16:29

标签: c# vb.net gdi+

我有一个控件,其中包含使用GDI +绘制的形状,用户可以放大它。如果他放大远处绘制形状的实际坐标变得非常大。

现在我放大了FillEllipse绘制的圆圈左边缘的位置,过了一会儿,圆圈突然翻转,我实际上看到的是右边缘而不是左边缘。

我提取了坐标并提出了一个简单的程序来重现问题(所需的一切都是一个表格,上面有两个单选按钮和一个足够大小的图片框):

Public Class Form1

    Private Sub Draw()
        'Create a canvas
        Dim bmp As New Bitmap(PictureBox1.Width, PictureBox1.Height)
        Using g As Graphics = Graphics.FromImage(bmp)
            g.Clear(Color.Black)

            'X location, Y location and the diameter of the circle to draw
            Dim x, y, dia As Single

            If RadioButton1.Checked Then
                'This works as expected
                x = 561
                y = -3993174.7
                dia = 7986931.0
            Else
                'This comes out flipped
                x = 561
                y = -4436903.7
                dia = 8874368.0
            End If

            'Define and draw the ellipse
            Dim rectf As New RectangleF(x, y, dia, dia)
            g.FillEllipse(Brushes.Red, rectf)
            g.DrawEllipse(Pens.LightGreen, rectf)
            'Mark the circle's vertical center
            g.DrawLine(Pens.Blue, 0.0F, y + dia / 2, CSng(bmp.Width), y + dia / 2)
        End Using

        'Display the image
        If PictureBox1.Image IsNot Nothing Then PictureBox1.Image.Dispose()
        PictureBox1.Image = bmp
    End Sub

    Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged
        'Redraw on radiobutton check change
        Draw()
    End Sub
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Draw()
    End Sub
End Class

在下面的图片中,红色部分是正在绘制的椭圆,黑色是背景,蓝色行是椭圆的垂直中心,根据我输入的坐标计算得出。

如果您运行该程序并选择RadioButton1,您将看到以下内容:

enter image description here

一切都很好,圆圈被向右拉。

但是,如果您选择RadioButton2,则会看到:

enter image description here

圆圈突然水平翻转,向左拉。

我怀疑某种程度上存在大的价值干扰但我老实说无法看出这种结果如何产生的原因。 有人可以解释为什么GDI +会感到不安以及如何解决它?

非常感谢VB.NET和C#中的两个答案。

0 个答案:

没有答案