在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);
现在您可以看到结果并不清晰,我使用下面的代码来获得更好的结果。
RenderOptions.SetEdgeMode(myImage, EdgeMode.Aliased);
图像变得清晰但有另一种副作用,如下图所示。
- 现在显示了一些行。
- 显示了一些额外的奇数行。
我已经包含了完整的代码,因此您可以自己进行实验。
注意:我在Canvascanvas周围使用ZoomBorder类。 平移和缩放图像
你尝试过使用过吗?
RenderOptions.SetBitmapScalingMode(myImage, BitmapScalingMode.HighQuality);
代替?
您也可以在Canvas控件上进行设置..
这不是一个真正的答案,但我想在WPF的奇怪行为中添加一些东西,希望有人能想出一个真正的解释。
我从(0,0) – (20000,20000)添加了一行。 创建8000行对象(n <8000)会产生如下预期结果:
现在,创建9000行对象将完全弄乱它,但请亲自看看:
没有设置EdgeMode.Aliased
它看起来很好,即使有很多对象。
- 哪个更快:单个(谓词)或Where(谓词)。单个()
- 使用C#和JSON.net读取JSON文件
- C# – 如何将图像从文件夹添加到数组并在listview中显示?
- 将DataTable作为参数传递给存储过程
- 如何在HTTPS上的Visual Studio中本地运行Azurefunction?
- 合并entity framework中的迁移条目
- UserControl的RenderControl要求(C#.NET)中的表单标记
- 使用Visual Studio 2013的Crystal Report aspnet_client / system_web / 4_6_81
- 如何在Windowsapp store应用中获取本地主机IP地址?