亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

安裝

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

PM> Install-Package Win2D.uwp

這個(gè)是Win10下的庫(kù),Win8下需要使用Win2D.win81庫(kù)。安裝完后在Project.json中可以看到相應(yīng)的庫(kù)依賴:

示例:

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

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

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

然后響應(yīng)其Draw事件,在里面添加繪制動(dòng)作:

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

運(yùn)行效果如下:

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

繪制API

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

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

繪制圖像

  • DrawCircle

  • DrawCachedGeometry

  • DrawEllipse

  • DrawGeometry

  • DrawImage

  • DrawInk

  • DrawLine

  • DrawRectangle

  • DrawRoundedRectangle

  • DrawText。

  • DrawTextLayout

填充圖像

  • FillCircle

  • FillEllipse

  • FillGeometry

  • FillRectangle

  • FillRoundedRectangle

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

2D轉(zhuǎn)換

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

    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)一繪制。它可以用于分塊繪制,也可以用于減少重復(fù)繪制。

    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的一個(gè)比較給力的特性就是支持濾鏡特效,用它可以非常方便的實(shí)現(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)還內(nèi)置了許多常用的濾鏡效果,它們都以Effect結(jié)尾,放在Microsoft.Graphics.Canvas.Effects名字空間下。

繪制事件

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

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

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

相關(guān)文章

  • C#中實(shí)現(xiàn)查找mysql的安裝路徑

    C#中實(shí)現(xiàn)查找mysql的安裝路徑

    這篇文章主要介紹了C#中實(shí)現(xiàn)查找mysql的安裝路徑,本文講解使用SQL語(yǔ)句查詢出mysql的安裝路徑,方便在備份時(shí)使用,需要的朋友可以參考下
    2015-06-06
  • C#手動(dòng)操作DataGridView使用各種數(shù)據(jù)源填充表格實(shí)例

    C#手動(dòng)操作DataGridView使用各種數(shù)據(jù)源填充表格實(shí)例

    本文主要介紹了C#手動(dòng)操作DataGridView使用各種數(shù)據(jù)源填充表格實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • c#使用DotNetZip封裝類操作zip文件(創(chuàng)建/讀取/更新)實(shí)例

    c#使用DotNetZip封裝類操作zip文件(創(chuàng)建/讀取/更新)實(shí)例

    DotnetZip是一個(gè)開(kāi)源類庫(kù),支持.NET的任何語(yǔ)言,可很方便的創(chuàng)建,讀取,和更新zip文件。而且還可以使用在.NETCompact Framework中。
    2013-11-11
  • asp.net中調(diào)用oracle存儲(chǔ)過(guò)程的方法

    asp.net中調(diào)用oracle存儲(chǔ)過(guò)程的方法

    存儲(chǔ)過(guò)程是在大型數(shù)據(jù)庫(kù)系統(tǒng)中,一組為了完成特定功能的SQL 語(yǔ)句集,存儲(chǔ)在數(shù)據(jù)庫(kù)中經(jīng)過(guò)第一次編譯后再次調(diào)用不需要再次編譯,用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù)來(lái)執(zhí)行它,下面給大家介紹下asp.net中調(diào)用oracle存儲(chǔ)過(guò)程的方法,需要的朋友可以參考下
    2015-08-08
  • 詳解c# 深克隆與淺克隆

    詳解c# 深克隆與淺克隆

    這篇文章主要介紹了c# 深克隆與淺克隆的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 淺談c#開(kāi)發(fā)者應(yīng)該了解的15個(gè)特性

    淺談c#開(kāi)發(fā)者應(yīng)該了解的15個(gè)特性

    本文列舉了15個(gè)值得了解的C#特性,旨在讓.NET開(kāi)發(fā)人員更好的使用C#語(yǔ)言進(jìn)行開(kāi)發(fā)工作。
    2021-05-05
  • 區(qū)分WCF與WebService的異同、優(yōu)勢(shì)

    區(qū)分WCF與WebService的異同、優(yōu)勢(shì)

    這篇文章主要幫助大家區(qū)分WCF與WebService的異同、優(yōu)勢(shì),分為三大方面進(jìn)行研究學(xué)習(xí),感興趣的小伙伴們可以參考一下
    2016-03-03
  • C#?wpf?通過(guò)HwndHost渲染視頻的實(shí)現(xiàn)方法

    C#?wpf?通過(guò)HwndHost渲染視頻的實(shí)現(xiàn)方法

    日常開(kāi)發(fā)中,特別是音視頻開(kāi)發(fā),需要在界面上渲染視頻,比如制作一個(gè)播放器、或者視頻編輯工具、以及視頻會(huì)議客戶端。通常拿到的是像素格式數(shù)據(jù),此時(shí)需要渲染到wpf窗口上就需要一定的方法,本文介紹一種通過(guò)hwnd渲染的方法,控件既能提供hwnd又能嵌入wpf窗口里
    2021-11-11
  • .net實(shí)現(xiàn)裁剪網(wǎng)站上傳圖片的方法

    .net實(shí)現(xiàn)裁剪網(wǎng)站上傳圖片的方法

    這篇文章主要介紹了.net實(shí)現(xiàn)裁剪網(wǎng)站上傳圖片的方法,比較實(shí)用的功能,需要的朋友可以參考下
    2014-07-07
  • C#使用集合實(shí)現(xiàn)二叉查找樹(shù)

    C#使用集合實(shí)現(xiàn)二叉查找樹(shù)

    這篇文章介紹了C#使用集合實(shí)現(xiàn)二叉查找樹(shù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08

最新評(píng)論