UWP 手繪視頻創作工具技術分享系列 - Ink & Surface Dial

来源:http://www.cnblogs.com/shaomeng/archive/2017/10/09/7634148.html
-Advertisement-
Play Games

本篇作為技術分享系列的第四篇,詳細講一下手繪視頻中 Surface Pen 和 Surface Dial 的使用場景。 先放一張微軟官方商城的圖,Surface 的使用中結合了 Surface Pen 和 Surface Dial。 Surface Pen 的使用場景不難想象,就像 iPad 和 A ...


本篇作為技術分享系列的第四篇,詳細講一下手繪視頻中 Surface Pen 和 Surface Dial 的使用場景。 

先放一張微軟官方商城的圖,Surface 的使用中結合了 Surface Pen 和 Surface Dial。

Surface Pen 的使用場景不難想象,就像 iPad 和 Android Pad 配置的筆一樣,Surface Pen 也在書寫、書畫和日常操作中發揮著很重要的作用。微軟的 Surface Pro 和 Surface Book 系列中都重點強調了 Surface Pen 的多種用途和便捷性。而在手繪視頻中,用戶主動創作、體現個性化最重要的部分,就是用戶用滑鼠、手指觸控或 Surface Pen 操作的文字和繪畫了,相比滑鼠和手指,Surface Pen 無疑是最適合創作的了。 

Surface Dial 相對來說會稍微陌生一些,日常工作中很少見到,因為 Surface Pro 和 Surface Book 銷售時並不包括它,需要單獨購買,所以使用沒有那麼普及。但是對於藝術創作者,Surface Dial 還是相當好用的,它可以完成很多輔助快捷功能,發揮非主力手的作用,解放你的主力手,如圖中所示:右手是主力創作手,專門負責繪畫等複雜操作;左手是非主力手,負責一些功能性的輔助操作,比如切換筆的顏色、粗細、放大縮小畫布等,另外 Dial 會預設附加一些系統級別的快捷功能,如音量調節,界面滾動等。另外 Dial 的操作分為兩種模式:off screen 和 on screen,顧名思義就是屏幕外和屏幕上的功能,目前支持 on screen 功能的只有 Surface Studio,其他設備只能 off screen 操作。on screen 時,圓形菜單會出現在 Dial 的周圍,而且會跟隨 Dial 移動,操作相當直觀,而 off screen 時,圓形菜單會以較小的形式出現。下圖分別是 on screen 和 off screen 的模式:

 

對 Surface Pen 和 Surface Dial 有一個初步的認識後,我們就開始正式講一下它們在 UWP 手繪視頻創作工具中的應用。

首先是 Surface Pen,它除了可以完成滑鼠的操作,如點擊等之外;對於手繪視頻應用更重要的是,筆記書畫的功能。這裡我們主要用到了 InkToolbar 和 InkCanvas,InkToolbar 是一個 Ink 工具條,支持自定義按鈕,提供多種筆跡/直尺/圓角/橡皮擦等,而 InkCanvas 是用於顯示 InkToolbar 選擇的畫筆繪製出來的筆跡的。這方面有很多文章有過系統的介紹,微軟官網也有很多文章:https://docs.microsoft.com/en-us/windows/uwp/input-and-devices/pen-and-stylus-interactions

在手繪視頻中的使用,分為兩個步驟:1. InkCanvas 繪製完成後,保存為 Ink 數據;2. 取出 Ink 數據,按照線條長度對拆分,保證每段線條不超過某個閾值,然後把拆分後的 Ink 序列傳給 Win2D 去做動態繪製。

以上處理,只針對圓珠筆有效,而針對非圓珠筆,因為存線上條對筆尖角度的變換和半透明顏色的疊加,所以需要做一點處理,如鉛筆、鋼筆和熒光筆,需要在筆尖變換方向時做形狀判斷,線上條疊加時做顏色加深;另外針對熒光筆,它對被覆蓋的顏色會有熒光的混色效果,實際是把被覆蓋顏色修改掉的,需要使用 OpenCV 做混色的計算,還需要註意邊緣的平滑處理。

除了系統提供的筆尖,我們也可以自己定義筆尖,這裡簡單提一下:筆尖有兩個重要的屬性需要定義,筆尖的形狀和它的填充。既包括了筆尖的輪廓,也包括他的填充,如圓珠筆的原型輪廓,鋼筆的橢圓形輪廓;圓珠筆的完全不透明填充,鉛筆的離散點填充,熒光筆的半透明填充。定義了這些屬性後,在 InkCanvas 中書寫時,筆尖結合方向,決定了不同方向筆畫的形狀和不同的粗細,筆尖的填充,決定了在反覆塗畫時,是否有顏色加深處理。

接下來是 Surface Dial,它有幾種操作:長按,短按和旋轉,我們所有的操作都基於這幾個操作。Surface Dial 提供了一個 Menu,長按 Dial 後呼出 Menu,我們需要把自定義操作的數據塞進 Menu 里,作為 Menu 的一個 Item,在 Dial 旋轉到該 Item 時,短按後進入它的功能。可以是直接執行某些功能,也可以是進去另一個子 Menu。Dial 呼出時的 Menu 樣式是不可以自定義的,所以我們如果要自定義 Menu 樣式,只能作為子 Menu 出現,如上面 on screen 圖所示,這個 Menu 就是一個完全自定義的顏色選擇器。

因為子 Menu 可以完全自定義,所以我們可以想一下怎麼製作這個 Menu,比如顏色選取,我們用一個圓形供用戶旋轉,短按後選擇某個顏色,長按切換功能;為了相容 off screen 和 on screen 模式,我們判斷到 off 或 on 後,決定圓形的半徑,在 off 時小一些,在 on 時留出 Dial 的尺寸。因為 Dial 的旋轉操作方式,很多子 Menu 都選擇了圓形的方式。

Ink 和 Dial 的介紹就到這裡,我們更多的介紹它的應用場景,具體的實現代碼大家可以去微軟官方查看文檔,實現過程相對簡單,不做贅述了,謝謝!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文目錄:1.1 htpasswd命令1.2 身份認證類基本指令1.3 Require指令1.4 web身份認證示例 httpd對web身份認證的支持很豐富,提供的控制也非常細緻。無疑,功能豐富意味著模塊多。關於完整的模塊,見http://httpd.apache.org/docs/2.4/mod/ ...
  • [1]顯示 [2]文件 [3]關機 [4]登錄 [5]shell [6]VIM ...
  • Tomcat 概述: Tomcat是Apache 軟體基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。由於有了Sun 的參與和支持,最新的Servlet 和JSP 規範總是能在Tomcat ...
  • 在講vim編輯器之前,我們要先明白為什麼要學vim編輯器。系統管理員的重要工作就是要修改與設定某些重要軟體的配置文件,因此至少要學會一種以上的文字介面的文書編輯器。 現在開始正式學習vim編輯器。基本上vim共分為三種模式,分別是一般模式,編輯模式,與指令列模式,這三種模式的作用分別是: 1)一般模 ...
  • 首先解釋下:本文只是對Asp.net MVC4高級編程這本書學習記錄的學習筆記,書本內容感覺挺簡單的,但學習容易忘記,因此在邊看的同時邊作下了筆記,可能其它朋友看的話沒有情境和邏輯順序還請諒解! 一、MVC控制器渲染視圖的三種方式。 如下以HomeController控制器中的代碼為例: 1、預設方 ...
  • 局部函數是C 7中的一個新功能,允許在一個函數中定義另一個函數。 何時使用局部函數? 局部函數的主要功能與匿名方法非常相似:在某些情況下,創建一個命名函數在讀者的認知負擔方面代價太大。有時,函數本身就是另一個函數的部分邏輯,因此用一個單獨的命名實體來污染“外部”範圍是毫無意義的。 您可能認為此功能是 ...
  • 在數值字元串的格式化中有很多格式化的格式,比如:用"C"表示貨幣格式,用"P"表示百分比格式,FCL中支持多種格式化字元串的方式。有時候我們會把一個數值轉換成string類型,然後再從string類型轉換成數值類型,這時候就要考慮轉換回來後的數值會不會和原來的相等呢? 首先的一種情況: 使用G常規格 ...
  • 基於ffmpeg和虹軟人臉識別庫的C#開源實現,對虹軟人臉識別庫進行了包裝,便於在C#中快速、安全的調用識別函數。同時,開源代碼中,包含完整的實現示例。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...