C# WinForm中 DrawLine 如何畫一條平滑的直線。。抗鋸齒

在C#中,默認的直線式很難看的。鋸齒嚴重。

如圖:


C WinForm中 DrawLine 如何畫一條平滑的直線。。抗鋸齒 - xyq - xyq

代碼如下:

           //創建一個Graphics對象
            Graphics grp = CreateGraphics();
            //繪製線條 起始窗口座標10,50 終止座標20,350 紅色,2px寬
            grp.DrawLine(new Pen(Color.Red,2), new Point(10, 50), new Point(20, 350));
            //釋放資源
            grp.Dispose();

十分難看,就像狗牙咬的一樣。也就是所謂的鋸齒。(玩遊戲的不陌生吧,遊戲都能開啓抗鋸齒效果。)

那麼,C#是否有抗鋸齒的選項來解決這個問題呢?

當然有。

.NET自帶抗鋸齒選項,默認爲關閉。只需指定抗鋸齒效果開,即可獲得平滑的效果。

非常簡單,給Graphics設置如下屬性即可。

//設置抗鋸齒
            grp.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

效果如圖:

左邊的是沒有開啓抗鋸齒的,右邊是開啓抗鋸齒後的效果:

C WinForm中 DrawLine 如何畫一條平滑的直線。。抗鋸齒 - xyq - xyq

效果明顯好多了吧,不過開啓抗鋸齒會對系統性能造成一點的影響。

表 SmoothingMode屬性值及說明

屬性值

說明

AntiAlias

指定消除鋸齒的呈現

Default

指定不消除鋸齒

HighQuality

指定高質量、低速度呈現

HighSpeed

指定高速度、低質量呈現

Invalid

指定一個無效模式

None

指定不消除鋸齒

看到csdn上有人說DrawCurve可以實現平滑效果,事實證明是不可能的。

如圖,第三條是DrawCurve來實現的。一樣的有鋸齒。DrawCurve原是用來生曲線的。

之所以有鋸齒,

C WinForm中 DrawLine 如何畫一條平滑的直線。。抗鋸齒 - xyq - xyq

抗鋸齒對系統性能影響的小測試:

同樣的位置使用抗鋸齒和不抗鋸齒生成10000次相同的線條。然後計算所花費的時間。

C WinForm中 DrawLine 如何畫一條平滑的直線。。抗鋸齒 - xyq - xyq

由此可見,當任務多的情況下,抗鋸齒還是對系統性能影響 比較明顯的。

轉自:http://hi.baidu.com/%CE%DE%E8%A6/blog/item/58d416d3be013a0b3af3cf3a.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章