91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#怎么使用Win2D在UWP程序中實現2D繪圖

發布時間:2022-07-07 10:07:51 來源:億速云 閱讀:154 作者:iii 欄目:開發技術

這篇文章主要介紹“C#怎么使用Win2D在UWP程序中實現2D繪圖”,在日常操作中,相信很多人在C#怎么使用Win2D在UWP程序中實現2D繪圖問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C#怎么使用Win2D在UWP程序中實現2D繪圖”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

安裝

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

PM> Install-Package Win2D.uwp

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

C#怎么使用Win2D在UWP程序中實現2D繪圖

示例:

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);
    }

運行效果如下:

C#怎么使用Win2D在UWP程序中實現2D繪圖

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

繪制API

前面使用了DrawingSesion下發繪制命令,和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矩陣實現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可以緩存一組繪制命令,然后統一繪制。它可以用于分塊繪制,也可以用于減少重復繪制。

    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的一個比較給力的特性就是支持濾鏡特效,用它可以非常方便的實現常用的模糊、陰影等效果,這里以高斯模糊為例修改下上面的效果。

    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);

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

繪制事件

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

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

到此,關于“C#怎么使用Win2D在UWP程序中實現2D繪圖”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

uwp
AI

罗城| 寿宁县| 准格尔旗| 烟台市| 满城县| 和政县| 鸡东县| 柳江县| 河津市| 噶尔县| 台湾省| 亚东县| 湖口县| 宜兰县| 金坛市| 云南省| 藁城市| 嘉兴市| 河池市| 樟树市| 禹州市| 黄冈市| 炉霍县| 巧家县| 四会市| 婺源县| 溧阳市| 高台县| 五指山市| 南城县| 遵化市| 陆良县| 彭泽县| 栾城县| 广昌县| 南投县| 正阳县| 阿拉善右旗| 阳朔县| 汶川县| 博湖县|