欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決WPF繪制矢量圖形模糊的問題

 更新時間:2022年06月28日 09:54:13   作者:天方  
這篇文章介紹了WPF繪制矢量圖形模糊問題的解決方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

WPF默認提供了抗鋸齒功能,通過向外擴展的半透明邊緣來實現(xiàn)模糊化。由于WPF采用了設(shè)備無關(guān)單位,當設(shè)備DPI大于系統(tǒng)DPI時,可能會產(chǎn)生像素自動擴展問題,這就導(dǎo)致線條自動向外擴展一個像素,并且與邊緣相鄰的線條顏色變成了半透明,如下圖所示:

這種特性在繪制細線條的時候會導(dǎo)致一些我們所不期望的結(jié)果:顏色變淡,線條模糊,線條變粗。很多時候,我們是無法繪制一個像素的清晰的線條的。對于這個問題,WPF給我們提供了幾種解決方案:

1、設(shè)置像素對齊

對于系統(tǒng)內(nèi)置的一些控件,通過設(shè)置SnapsToDevicePixels為true,可以非常方便的實現(xiàn)像素對齊。

這個屬性是有繼承效果的,只要在父控件上設(shè)置了,其所有的子控件都是生效的。但它有時會出現(xiàn)改變窗口大小時線條消失的情況

2、設(shè)置對齊參考線

方法1只針對系統(tǒng)的內(nèi)置的一些控件有效,但對于使用DrawingVisual等方式自繪的圖形則沒有效果。此時可以通過設(shè)置參考線解決這一問題。

簡單的示例如下:

void render(DrawingContext dc)
{
    var pen = new Pen(Brushes.Black, 1);
    var d = pen.Thickness / 2;

    var guidelines = new GuidelineSet(new []vvxyksv9kd, new[]vvxyksv9kd);
    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、設(shè)置 RenderOptions.EdgeMode="Aliased"

前面的設(shè)置參考線方式效果較好,不過需要編寫較多的代碼,并且只能適用于水平或垂直的線條。很多時候,我使用的是設(shè)置 RenderOptions.EdgeMode="Aliased"(如果在代碼中則是使用this.SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased)

4、設(shè)置UseLayoutRounding="True"

這個是在WPF4后增加的一個選項,用來控制布局舍入的,用來控制圖片模糊的效果非常好,用于控制控件的模糊效果也不錯的。不過也是對DrawingContext繪制的圖形沒有效果的。

小結(jié):WPF的抗鋸齒效果在給我們帶來的很好的視覺效果的同時,也給我們帶來的不少困擾,本文就總結(jié)了幾種常見的解決方案,希望能對大家的工作帶來一點幫助。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解析C#彩色圖像灰度化算法的實現(xiàn)代碼詳解

    解析C#彩色圖像灰度化算法的實現(xiàn)代碼詳解

    本篇文章是對C#中彩色圖像灰度化算法的實現(xiàn)進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C#中的is和as操作符區(qū)別小結(jié)

    C#中的is和as操作符區(qū)別小結(jié)

    這篇文章主要介紹了C#中的is和as操作符區(qū)別小結(jié),is是驗證操作對象是不是自己希望的,as是將對象轉(zhuǎn)換成指定類型,需要的朋友可以參考下
    2015-01-01
  • 如何解決hash沖突

    如何解決hash沖突

    上篇文章 為什么哈希存取比較快?使用它需要付出什么代價 只是簡單介紹了使用hash所帶來的利與弊。并未涉及hash的技術(shù)細節(jié),本文則著重學(xué)習一下如何解決哈希編址的沖突問題。
    2016-06-06
  • C#并發(fā)編程之Task類詳解

    C#并發(fā)編程之Task類詳解

    Task是建立在線程池之上的一種多線程技術(shù),它的出現(xiàn)使Thread成為歷史。其使用方法非常簡單,本文就來通過幾個示例為大家講講它的具體使用吧
    2023-03-03
  • C# out關(guān)鍵詞的應(yīng)用實例

    C# out關(guān)鍵詞的應(yīng)用實例

    下面小編就為大家分享一篇C# out關(guān)鍵詞的應(yīng)用實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 利用unity代碼C#封裝為dll的步驟分享

    利用unity代碼C#封裝為dll的步驟分享

    這篇文章主要給大家介紹了關(guān)于利用unity代碼C#封裝為dll的相關(guān)資料,文中通過圖文將實現(xiàn)的方法介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2018-05-05
  • C#將圖片存放到SQL SERVER數(shù)據(jù)庫中的方法

    C#將圖片存放到SQL SERVER數(shù)據(jù)庫中的方法

    這篇文章主要介紹了C#將圖片存放到SQL SERVER數(shù)據(jù)庫中的方法,以實例形式較為詳細的分析了C#保存圖片到SQL Server數(shù)據(jù)庫的具體步驟與相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • 解決C#獲取鼠標相對當前窗口坐標的實現(xiàn)方法

    解決C#獲取鼠標相對當前窗口坐標的實現(xiàn)方法

    本篇文章是對在C#中獲取鼠標相對當前窗口坐標的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 如何使用C#修改本地Windows系統(tǒng)時間

    如何使用C#修改本地Windows系統(tǒng)時間

    這篇文章主要介紹了如何使用C#修改本地Windows系統(tǒng)時間,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01
  • C# Winfrom實現(xiàn)Skyline畫直線功能的示例代碼

    C# Winfrom實現(xiàn)Skyline畫直線功能的示例代碼

    這篇文章主要介紹了C# Winfrom實現(xiàn)Skyline畫直線功能的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-12-12

最新評論