C# 应用了虚线样式的线绘制错误
在做一些GIS编程时,我偶然发现了以下奇怪的问题: 当我将具有相当大变换值的变换矩阵应用于图形对象,然后从点a到点B绘制一条线时,只要我将DashStyle应用于所使用的笔对象,它就会被绘制为弯曲的 以下是一些示例代码:C# 应用了虚线样式的线绘制错误,c#,.net,winforms,C#,.net,Winforms,在做一些GIS编程时,我偶然发现了以下奇怪的问题: 当我将具有相当大变换值的变换矩阵应用于图形对象,然后从点a到点B绘制一条线时,只要我将DashStyle应用于所使用的笔对象,它就会被绘制为弯曲的 以下是一些示例代码: protected override void OnPaint( PaintEventArgs e ) { base.OnPaint( e ); Graphics g = e.Graphics; g.Clear( Color.White ); g
protected override void OnPaint( PaintEventArgs e ) {
base.OnPaint( e );
Graphics g = e.Graphics;
g.Clear( Color.White );
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
Matrix m = new System.Drawing.Drawing2D.Matrix();
m.Reset();
m.Translate( -1520106.88f, -6597594.5f, MatrixOrder.Append );
m.Scale( 0.393068463f, -0.393068463f, MatrixOrder.Append );
g.Transform = m;
g.TranslateTransform( 0, 400 );
Pen p1 = new Pen( Color.Green, 8.0f );
Pen p2 = new Pen( Color.Magenta, 7.0f );
PointF[] roadLine = new PointF[2];
roadLine[0] = new PointF( 1520170.13f, 6596633.0f );
roadLine[1] = new PointF( 1521997.38f, 6596959.0f );
// Normal (solid line)
g.DrawLines( p1, roadLine );
g.DrawLines( p2, roadLine );
g.TranslateTransform( 0, -200 );
//Dashed
g.DrawLines( p1, roadLine );
p2.DashStyle = DashStyle.Dash;
g.DrawLines( p2, roadLine );
g.TranslateTransform( 0, -200 );
//Dashed
g.DrawLines( p1, roadLine );
p2.DashStyle = DashStyle.DashDot;
g.DrawLines( p2, roadLine );
g.TranslateTransform( 0, -200 );
//Dash-Dot-Dot
g.DrawLines( p1, roadLine );
p2.DashStyle = DashStyle.DashDotDot;
g.DrawLines( p2, roadLine );
}
如果你把它放到一个新的Windows窗体应用程序中并运行它,你会看到一些实线和一些虚线(具有不同的虚线样式)。我希望虚线会完全覆盖相应的实线,但它们不会
请注意,绿色实线和虚线都使用点A和点B的坐标
这是预期的行为,还是应该将其报告为.NET错误
我用Visual Studio 2008和.NET 2.0以及.NET 3.5进行了测试。是的,这是一个bug。你应该报告吗?我认为微软不会对此采取任何行动 您可以尝试更改图形例程以尝试不在这样的比例下工作,或者避免使用
DashStyle
属性。设置自己的DashPattern
也不能解决问题
我认为WPF会更好地处理这种情况,因为它是基于矢量的,而不是基于像素的。谢谢。我会看看我是否可以修改我的图形例程来避免这个问题。讨厌的人:/