Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
338 views
in Technique[技术] by (71.8m points)

graphics - How can I draw a Polyline (in WPF) without anti-aliasing?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The obvious candidate for having the EdgeMode set to Aliased is the DrawingVisual, but setting it seemed to make no difference:

    // This had no effect!
    RenderOptions.SetEdgeMode(dv, EdgeMode.Aliased);

DrawingVisual has a protected property VisualEdgeMode, which presumably should have been set by calling the above. During debugging, I put a watch on the property and found it was not being set!

As it's a protected property you cannot set it directly, but you can create a subclass and do it that way. In the end, this is what worked for me:

    class DrawingVisualAliased : DrawingVisual
    {
        public DrawingVisualAliased() : base()
        {
            VisualEdgeMode = EdgeMode.Aliased;
        }
    }

Not sure if this is the best way. It seems like the property should be set by calling RenderOptions.SetEdgeMode, so maybe there's something else not quite right.

Thanks to @Rekshino for pushing me to create an example. It certainly helped to be able to work on a very simplified version of the problem, with a clear visual representation of it.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...