在WPF中使用EdgeMode.Aliased选项时,会出现额外的行

我今天使用WPF遇到了一个非常奇怪的问题。 这是我用来绘制10000个LineGeometry对象的代码。

 // Draw 10000 lines var g = new GeometryGroup(); var x = 0; var y = 0; var n = 1; while (n  600) { x = 0; y = y + 20; } var l = new LineGeometry { StartPoint = new Point(x, y), EndPoint = new Point(x, y + 15) }; g.Children.Add(l); n++; } var drawing = new GeometryDrawing {Geometry = g}; var drawingGroup = new DrawingGroup(); drawingGroup.Children.Add(drawing); var myPen = new Pen {Thickness = 1, Brush = Brushes.Yellow}; drawing.Pen = myPen; var myImage = new Image {Stretch = Stretch.None, Margin = new Thickness(10)}; var myDrawingImage = new DrawingImage {Drawing = drawingGroup}; myImage.Source = myDrawingImage; canvas.Children.Add(myImage); 

在EdgeMode.Aliased之前

现在您可以看到结果并不清晰,我使用下面的代码来获得更好的结果。

 RenderOptions.SetEdgeMode(myImage, EdgeMode.Aliased); 

图像变得清晰但有另一种副作用,如下图所示。

  1. 现在显示了一些行。
  2. 显示了一些额外的奇数行。

在EdgeMode.Aliased之后

我已经包含了完整的代码,因此您可以自己进行实验。

注意:我在Canvascanvas周围使用ZoomBorder类。 平移和缩放图像

你尝试过使用过吗?

RenderOptions.SetBitmapScalingMode(myImage, BitmapScalingMode.HighQuality);

代替?

您也可以在Canvas控件上进行设置..

  ... 

这不是一个真正的答案,但我想在WPF的奇怪行为中添加一些东西,希望有人能想出一个真正的解释。

我从(0,0) – (20000,20000)添加了一行。 创建8000行对象(n <8000)会产生如下预期结果:

在此处输入图像描述

现在,创建9000行对象将完全弄乱它,但请亲自看看: 在此处输入图像描述

没有设置EdgeMode.Aliased它看起来很好,即使有很多对象。