Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 应用了虚线样式的线绘制错误_C#_.net_Winforms - Fatal编程技术网

C# 应用了虚线样式的线绘制错误

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

在做一些GIS编程时,我偶然发现了以下奇怪的问题: 当我将具有相当大变换值的变换矩阵应用于图形对象,然后从点a到点B绘制一条线时,只要我将DashStyle应用于所使用的笔对象,它就会被绘制为弯曲的

以下是一些示例代码:

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会更好地处理这种情况,因为它是基于矢量的,而不是基于像素的。

谢谢。我会看看我是否可以修改我的图形例程来避免这个问题。讨厌的人:/