我今天使用WPF遇到了一个非常奇怪的问题。这是我用来绘制10000 LineGeometry
个对象的代码。
// Draw 10000 lines
var g = new GeometryGroup();
var x = 0;
var y = 0;
var n = 1;
while (n < 10000)
{
x = x + 20;
if (x > 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);
图像变得清晰但有另一种副作用,如下图所示。
我已经包含了完整的代码,因此您可以自己试验一下。
注意: 我在Canvas画布周围使用ZoomBorder类。 Pan & Zoom Image
答案 0 :(得分:1)
这不是一个真正的答案,但我想在WPF的奇怪行为中添加一些内容,希望有人能够提出真正的解释。
我从(0,0) - (20000,20000)添加了一行。创建8000行对象(n <8000)产生如下预期结果:
现在,创建9000个行对象会让它变得混乱,但请亲自看看:
没有设置EdgeMode.Aliased
它看起来很好,即使对象数量很多。
答案 1 :(得分:1)
您是否尝试过使用
RenderOptions.SetBitmapScalingMode(myImage, BitmapScalingMode.HighQuality);
代替?
您也可以在Canvas控件上进行设置..
<Canvas RenderOptions.BitmapScalingMode="HighQuality"> ...