最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用Win2D在UWP程序中實現(xiàn)2D繪圖

 更新時間:2022年06月26日 10:38:54   作者:天方  
這篇文章介紹了C#使用Win2D在UWP程序中實現(xiàn)2D繪圖的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

在新的Windows UWP程序中,引入了一個新的API庫: Win2D。它是一個d2d的封裝,可以直接使用C#來快速實現(xiàn)高效2D繪圖了。這個API雖然在Win8.1時代就開始著手開發(fā)了,但最近才完善了下來。本文這里就簡單的介紹一下它的基本用法:

安裝

Win2D并不是Win10 SDK里面的一部分,需要從Nuget上安裝,在程序包管理器里直接安裝Win2D.uwp即可。

PM> Install-Package Win2D.uwp

這個是Win10下的庫,Win8下需要使用Win2D.win81庫。安裝完后在Project.json中可以看到相應的庫依賴:

示例:

Win2D引入了一個新的畫布:Microsoft.Graphics.Canvas.UI.Xaml.CanvasControl,所有的繪制必須在它上面進行。因此首先在XAML中添加CanvasControl作為底圖:

    xmlns:canvas="using:Microsoft.Graphics.Canvas.UI.Xaml"

    <Grid>
         <canvas:CanvasControl Draw="canvasControl_Draw" ClearColor="CornflowerBlue" />
    </Grid>

然后響應其Draw事件,在里面添加繪制動作:

    void canvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
    {
        args.DrawingSession.DrawEllipse(155, 115, 80, 30, Colors.Black, 3);
        args.DrawingSession.DrawText("Hello, world!", 100, 100, Colors.Yellow);
    }

運行效果如下:

這種方式與WinForm和WPF中的自繪制比較像,只是一些API有些差異。

繪制API

前面使用了DrawingSesion下發(fā)繪制命令,和WPF中的DrawingContext差不多,就是一個繪制上下文。它主要的命令分為如下兩種:DrawXXX和FillXXX。DrawXXX只是繪制圖像,而FillXXX只填充圖像,這里和WPF那種繪制和填充在一個API里的方式稍稍有點不同。

由于API并不多,這里列舉了一下,基本上看著就知道怎么用了。

繪制圖像

  • DrawCircle

  • DrawCachedGeometry

  • DrawEllipse

  • DrawGeometry

  • DrawImage

  • DrawInk

  • DrawLine

  • DrawRectangle

  • DrawRoundedRectangle

  • DrawText。

  • DrawTextLayout

填充圖像

  • FillCircle

  • FillEllipse

  • FillGeometry

  • FillRectangle

  • FillRoundedRectangle

它的API還比較簡單,基本上看著就知道怎么用,不過其中的DrawImage能傳入一個IcanvasImage類型,而這個類型并不僅僅是圖片,包括下面介紹的CanvasCommandList和Effect都是這種類型,使用的時候需要熟悉一下。

2D轉換

2D繪圖的過程中往往還伴隨著一些平移,旋轉等2D轉換的操作,DrawingSession中提供了一個Transform屬性可以傳入一個3*2矩陣實現(xiàn)2D轉換。

    var ds = args.DrawingSession;

    ds.Transform = Matrix3x2.CreateTranslation(new Vector2(200, 100));
    ds.DrawText("A", 0, 0, Colors.White);

    ds.Transform *= Matrix3x2.CreateRotation(12, new Vector2(200,80));
    ds.DrawText("B", 0, 0, Colors.White);

CanvasCommandList

CanvasCommandList可以緩存一組繪制命令,然后統(tǒng)一繪制。它可以用于分塊繪制,也可以用于減少重復繪制。

    var renderTarget = new CanvasCommandList(sender);
    using (var clds = renderTarget.CreateDrawingSession())
    {
        clds.DrawEllipse(155, 115, 80, 30, Colors.Black, 3);
        clds.DrawText("Hello, world!", 100, 100, Colors.Yellow);
    }

    args.DrawingSession.DrawImage(renderTarget);

濾鏡效果

Win2D的一個比較給力的特性就是支持濾鏡特效,用它可以非常方便的實現(xiàn)常用的模糊、陰影等效果,這里以高斯模糊為例修改下上面的效果。

    var cmdList = new CanvasCommandList(sender);
    using (var clds = cmdList.CreateDrawingSession())
    {
        clds.DrawEllipse(155, 115, 80, 30, Colors.Black, 3);
        clds.DrawText("Hello, world!", 100, 100, Colors.Yellow);
    }

    var effect = new GaussianBlurEffect();
    effect.Source = cmdList;

    args.DrawingSession.DrawImage(effect);

系統(tǒng)還內置了許多常用的濾鏡效果,它們都以Effect結尾,放在Microsoft.Graphics.Canvas.Effects名字空間下。

繪制事件

除了前面用到的繪制的時候觸發(fā)繪制操作的Draw事件外,還有一個比較常用的事件CreateResource,它在最開始加載控件的時候觸發(fā),往往用于初始化各種資源。

另外再來看看Draw事件的觸發(fā)條件,它基本上和WPF的OnRender差不多,也就是說,一般在初次加載時會觸發(fā),改變窗口大小的時候會觸發(fā),拖動窗口時不會觸發(fā)。如果要在后臺控制其重繪也比較簡單,但用其Invalidate方法即可。

到此這篇關于C#使用Win2D在UWP程序中實現(xiàn)2D繪圖的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C#調用Windows的API實現(xiàn)窗體動畫

    C#調用Windows的API實現(xiàn)窗體動畫

    在VF、VB、PB的應用中,有些無法通過語言工具本身來完成的或者做得不理想的功能,我們會考慮通過Windows的API來完成。本文就來通過調用Windows的API實現(xiàn)窗體動畫,感興趣的可以嘗試一下
    2022-11-11
  • 基于WPF實現(xiàn)3D畫廊動畫效果的示例代碼

    基于WPF實現(xiàn)3D畫廊動畫效果的示例代碼

    這篇文章主要為大家詳細介紹了如何基于WPF實現(xiàn)簡單的3D畫廊動畫效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-02-02
  • WPF實現(xiàn)動畫效果(一)之基本概念

    WPF實現(xiàn)動畫效果(一)之基本概念

    這篇文章介紹了WPF實現(xiàn)動畫效果之基本概念,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • C#文件上傳的簡單實現(xiàn)

    C#文件上傳的簡單實現(xiàn)

    這篇文章主要為大家詳細介紹了C#文件上傳的簡單實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • C#區(qū)分中英文按照指定長度截取字符串的方法

    C#區(qū)分中英文按照指定長度截取字符串的方法

    這篇文章主要介紹了C#區(qū)分中英文按照指定長度截取字符串的方法,涉及C#操作字符串的正則匹配與截取等常用操作技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • C#請求http向網(wǎng)頁發(fā)送接收數(shù)據(jù)的方法

    C#請求http向網(wǎng)頁發(fā)送接收數(shù)據(jù)的方法

    這篇文章主要為大家詳細介紹了C#請求http向網(wǎng)頁發(fā)送數(shù)據(jù)、網(wǎng)頁接收的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • c#添加Newtonsoft.Json包的操作

    c#添加Newtonsoft.Json包的操作

    這篇文章主要介紹了c#添加Newtonsoft.Json包的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • C#實現(xiàn)UDP打洞的示例代碼

    C#實現(xiàn)UDP打洞的示例代碼

    這篇文章主要為大家詳細介紹了C#中實現(xiàn)UDP打洞的相關知識,文中的示例代碼簡潔易懂,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-01-01
  • C#在Windows上調用7-zip實現(xiàn)壓縮文件

    C#在Windows上調用7-zip實現(xiàn)壓縮文件

    這篇文章主要為大家詳細介紹了C#如何在Windows上調用7-zip實現(xiàn)壓縮文件,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以學習一下
    2023-10-10
  • C#實現(xiàn)獲取計算機信息的示例代碼

    C#實現(xiàn)獲取計算機信息的示例代碼

    這篇文章主要為大家詳細介紹了C#實現(xiàn)獲取計算機軟硬件信息的相關知識,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考下
    2024-01-01

最新評論

安西县| 沂水县| 新竹市| 吕梁市| 永顺县| 奉节县| 库尔勒市| 马边| 忻城县| 庆云县| 本溪市| 洛浦县| 宜州市| 上杭县| 本溪市| 临高县| 东乡族自治县| 荆州市| 溆浦县| 象州县| 老河口市| 阿尔山市| 汉沽区| 灌阳县| 泰和县| 军事| 托克托县| 永昌县| 全州县| 清河县| 肇州县| 江阴市| 安阳县| 兴山县| 清河县| 辰溪县| 清丰县| 延津县| 亚东县| 余庆县| 三明市|