網(wǎng)站首頁 編程語言 正文
WPF默認提供了抗鋸齒功能,通過向外擴展的半透明邊緣來實現(xiàn)模糊化。由于WPF采用了設備無關單位,當設備DPI大于系統(tǒng)DPI時,可能會產(chǎn)生像素自動擴展問題,這就導致線條自動向外擴展一個像素,并且與邊緣相鄰的線條顏色變成了半透明,如下圖所示:
這種特性在繪制細線條的時候會導致一些我們所不期望的結果:顏色變淡,線條模糊,線條變粗。很多時候,我們是無法繪制一個像素的清晰的線條的。對于這個問題,WPF給我們提供了幾種解決方案:
1、設置像素對齊
對于系統(tǒng)內(nèi)置的一些控件,通過設置SnapsToDevicePixels為true,可以非常方便的實現(xiàn)像素對齊。
這個屬性是有繼承效果的,只要在父控件上設置了,其所有的子控件都是生效的。但它有時會出現(xiàn)改變窗口大小時線條消失的情況
2、設置對齊參考線
方法1只針對系統(tǒng)的內(nèi)置的一些控件有效,但對于使用DrawingVisual等方式自繪的圖形則沒有效果。此時可以通過設置參考線解決這一問題。
簡單的示例如下:
void render(DrawingContext dc) { var pen = new Pen(Brushes.Black, 1); var d = pen.Thickness / 2; var guidelines = new GuidelineSet(new []bsd5o550550j, new[]bsd5o550550j); dc.PushGuidelineSet(guidelines); dc.DrawLine(pen, new Point(30, 10), new Point(30, 80)); dc.DrawLine(pen, new Point(50, 20), new Point(50, 80)); }
具體代碼參見MSDN:Apply a GuidelineSet to a Drawing,也可以參看這篇文章WPF DrawingContext seems ignore SnapToDevicePixels
3、設置 RenderOptions.EdgeMode="Aliased"
前面的設置參考線方式效果較好,不過需要編寫較多的代碼,并且只能適用于水平或垂直的線條。很多時候,我使用的是設置 RenderOptions.EdgeMode="Aliased"
(如果在代碼中則是使用this.SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased)
)
4、設置UseLayoutRounding="True"
這個是在WPF4后增加的一個選項,用來控制布局舍入的,用來控制圖片模糊的效果非常好,用于控制控件的模糊效果也不錯的。不過也是對DrawingContext繪制的圖形沒有效果的。
小結:WPF的抗鋸齒效果在給我們帶來的很好的視覺效果的同時,也給我們帶來的不少困擾,本文就總結了幾種常見的解決方案,希望能對大家的工作帶來一點幫助。
原文鏈接:https://www.cnblogs.com/TianFang/p/5496722.html
相關推薦
- 2022-05-05 Python學習之列表常用方法總結_python
- 2022-02-02 element icon圖標方向旋轉(zhuǎn)
- 2022-09-09 C++中vector<vector<int>?>的基本使用方法_C 語言
- 2022-09-13 Nginx如何限制IP訪問只允許特定域名訪問_nginx
- 2022-05-13 this.$route.params獲取不到
- 2022-10-14 Redis緩存擊穿解決方案之互斥鎖
- 2022-08-02 Oracle數(shù)據(jù)庫丟失表排查思路實戰(zhàn)記錄_oracle
- 2022-12-07 C++中的數(shù)字轉(zhuǎn)字符串to_string_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支