应用了DashStyle的线条是错误绘制的



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

下面是一些示例代码:
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会更好地处理这种情况,因为它是基于矢量的,而不是基于像素的。

最新更新