S.O.的长期用户,但是第一次张贴海报。请温柔。 :)
使用.NET的GDI +(任何版本的Framework,从2.0到4.5.1),当在' Graphics&上渲染具有大翻译值的图形基元时,我会遇到非常奇怪的行为#39;宾语。这是一段非常简单的代码,用于演示问题...只需粘贴到Windows窗体中并运行:
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
e.Graphics.TranslateTransform(183946953, 82803840)
Dim r As Rectangle = New Rectangle(New Point(-183946600.0, -82803570.0), New Size(0, 0))
r.Inflate(25, 25)
e.Graphics.FillEllipse(Brushes.Red, r)
e.Graphics.DrawEllipse(Pens.Black, r)
End Sub
生成的椭圆严重失真。并且转换值越高,失真越严重。
有谁知道为什么GDI +会这样做?
感谢。
答案 0 :(得分:1)
内部GDI +对某些操作使用固定点坐标表示。您可能会遇到坐标整数部分的24位限制。解决方法是避免翻译:没有人能看到在这些坐标处绘制的任何东西。如果要进行平移以便渲染到打印机或位图,则需要缩小所有坐标。