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
如果這兩點正好在整數的象素點上,那麼就不會有鋸齒了,否則將會有鋸齒.
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章