wpf中如何画1个象素的线

很久没有更新博客了,最近实在是太忙了.
最近想用wpf做一个画线的程序,但是遇到了一个困难,就是wpf画的1个象素的线
始终存在锯齿,如何消除这个锯齿呢....?
在网上遍寻了很多资料,特别感谢这篇文章
但是这个贴子最终也没有解决方案,我研究了很久,终于
让我发现了使用PushGuidelineSet的秘密.
 
在我们使用DrawingContext Drawline的时候,需要设置参考线,可以避免锯齿和阴影.
(针对水平和垂直的线而言)
msdn里面提到过,如何消除锯齿.
一种方法就是:uielement的snaptodevicepixel=true
但是我们这里是要自己绘制,使用DrawingContext方法,msdn里面有一个DrawingGroup的方法.
 
但是哪里都没有对GuidelineSet的详细解释,如果在(x1,y1) (x1,y2)处画一条线该如何设置
Guideline呢?
 
其实Guideline的意思是:你设置一个逻辑象素点该点和设备象素点对齐
逻辑象素点就是wpf里面的independ device pixel
而设备象素点就是device pixel我们屏幕上的实际象素点
 
也就是说,如果你要在(x1,y1) (x1,y2)处画一条宽度为1的线
Guideline的x应该加一个 x1-m/2
(对于96dpi而言) m=1 x1-1/2=x1-0.5
对于120dpi而言 m=2 x1-0.8/2=x1-.04
还有一点需要注意的是Pen的thickness也需要改变
thickness*m
对于96dpi 为1
对于120dpi 为0.8
 
不知道有没有解释清楚,我也正在写该代码,写好后会传一段上来.
 
再解释一下:
如果你画 x1处的垂直线,那么线的中心肯定在x1处,线是有宽度的
假设宽度为w那么该线将跨越 x1-w/2和 x1+w/2
如果这两点正好在整数的象素点上,那么就不会有锯齿了,否则将会有锯齿.
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章