文告訴大家如何在 win2d 使用漸變顏色
在 UWP 的 Win2d 使用漸變顏色需要 CanvasLinearGradientBrush 做顏色,本文告訴大家如何在 win2d 使用 CanvasLinearGradientBrush 做漸變。
漸變的顏色可以嘗試打開任意一個控件,查看屬性,就可以知道漸變的效果
漸變效果是漸變開始點,漸變結束點作為線性的漸變,也就是從點的開始到點的結束漸變。
中間在偏移多少的點,設置為中間顏色,這樣兩個顏色之間就會出現漸變的效果。如上面的圖,只有第一個點和第二個點,兩個點的顏色不相同,所以中間就會出現漸變的顏色。
在 win2d 漸變相對的是整個畫布的顏色,也就是設置漸變的開始點不是相對于使用漸變的元素,而是畫布的坐標。
請看圖,使用的漸變是從(100,10)到(1000,1000),元素是從(300,100)開始畫,元素的寬度是 300 高度是 200 ,所以實際上元素使用的漸變不是從開始的漸變開始算,而是拿到漸變的對應元素所在顏色
使用 CanvasLinearGradientBrush 需要 CanvasGradientStop 做中間的顏色,表示在相對于第一個點到最后一個點的多少顏色。
如使用下面代碼,就是第一個點是白色,最后一個點是黑色。注意 Position 的范圍是 0-1 ,也就是 0 就是第一個點,而 1 就是最后一個點
var canvasGradientStop = new CanvasGradientStop[2]; canvasGradientStop[0] = new CanvasGradientStop { Position = 0, Color = Colors.White }; canvasGradientStop[1] = new CanvasGradientStop() { Position = 1, Color = Colors.Black }; 1 2 3 4 5 6 7 8 9 10 11 12
創建 CanvasLinearGradientBrush 需要 CanvasResourceCreator ,建議使用 win2d 的畫板作為輸入。
private void CanvasControl_OnDraw(CanvasControl sender, CanvasDrawEventArgs args) // 忽略代碼 var canvasGradientStop = new CanvasGradientStop[2]; canvasGradientStop[0] = new CanvasGradientStop { Position = 0, Color = Colors.White }; canvasGradientStop[1] = new CanvasGradientStop() { Position = 1, Color = Colors.Black }; var canvasLinearGradientBrush = new CanvasLinearGradientBrush(sender, canvasGradientStop) { StartPoint = new Vector2(0, 0), EndPoint = new Vector2(0, 1000) }; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
這里開始的點和結束的點都是相對于畫布的坐標,而不是相對于使用顏色的元素。
這時創建一個矩形使用顏色,先設置他的坐標是 200,200,在點擊按鈕的時候移動矩形,可以看到矩形在移動的時候顏色在變化
args.DrawingSession.FillRectangle(new Rect(X, Y, 300, 300), canvasLinearGradientBrush); 1
如果需要在元素內做元素漸變,就需要修改 CanvasLinearGradientBrush 的 StartPoint 和 EndPoint,讓 StartPoint 為元素的左上角加上的值。
也就是在原先的開始和最后的點都加上元素才可以進行元素的變化。
例如矩形是已知的,想要讓矩形從上到下是漸變,就可以使用下面代碼
var rect = new Rect(X, Y, 300, 300); var canvasLinearGradientBrush = new CanvasLinearGradientBrush(sender, canvasGradientStop) { StartPoint = new Vector2(X, Y), EndPoint = new Vector2(X, (float) (Y+rect.Height)) }; args.DrawingSession.FillRectangle(rect, canvasLinearGradientBrush); 1 2 3 4 5 6 7 8 9
從上面代碼可以知道畫出來的漸變需要開始的點和結束的點都是從 rect 計算,這樣才可以做元素內的漸變
全部代碼
xaml
xmlns:win2d="using:Microsoft.Graphics.Canvas.UI.Xaml" 忽略的代碼 <win2d:CanvasControl Draw="CanvasControl_OnDraw"></ 1 2 3 4 5
相信大家都可以創建一個 win2d 的控件,如果還不知道如何創建,請看win10 uwp win2d 入門 看這一篇就夠了
在后臺代碼
private void CanvasControl_OnDraw(CanvasControl sender, CanvasDrawEventArgs args) { var canvasGradientStop = new CanvasGradientStop[2]; canvasGradientStop[0] = new CanvasGradientStop() { Position = 0, Color = Colors.White }; canvasGradientStop[1] = new CanvasGradientStop() { Position = 1, Color = Colors.Black }; var rect = new Rect(X, Y, 300, 300); var canvasLinearGradientBrush = new CanvasLinearGradientBrush(sender, canvasGradientStop) { StartPoint = new Vector2(X, Y), EndPoint = new Vector2(X, (float) (Y + rect.Height)) }; args.DrawingSession.FillRectangle(rect, canvasLinearGradientBrush); } private float X { set; get; } = 200; private float Y { set; get; } = 200; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
從上面的線條漸變可以知道使用的坐標都是畫布,在圓圈也是,下面給大家看一下圓圈做出來的圖片
使用這個顏色需要使用 CanvasRadialGradientBrush ,在創建的使用需要傳入 CanvasResourceCreator 因為在 win2d 控件的畫函數,所以使用下面代碼
var canvasRadialGradientBrush = new CanvasRadialGradientBrush(sender, canvasGradientStop); 1
這里的 canvasGradientStop 還是上面的 canvasGradientStop ,但是需要知道這里的 Position 對應的是從圓心到最外面。
var canvasGradientStop = new CanvasGradientStop[2]; canvasGradientStop[0] = new CanvasGradientStop { Position = 0, Color = Color.FromArgb(255, 210, 200, 162) }; canvasGradientStop[1] = new CanvasGradientStop() { Position = 1, Color = Colors.Black }; 1 2 3 4 5 6 7 8 9 10 11 12
所以我設置了圓心為 #D2C8A2 顏色,把最外面寫為黑色,這樣就可以做出上面看到的顏色
在圓圈需要設置圓心所在的坐標,這個坐標就是相對畫布的,所以不是相對元素
為了讓矩形的中心設置的顏色,我需要修改代碼
var canvasRadialGradientBrush = new CanvasRadialGradientBrush(sender, canvasGradientStop) { Center = new Vector2((float) (rect.X + rect.Width / 2), (float) (rect.Y + rect.Height / 2)), RadiusX = 300, RadiusY = 300 }; 1 2 3 4 5 6 7
因為可以使用橢圓,所以需要設置 RadiusX 就是圓的水平半徑和 RadiusY 這個我也不知道什么的值。
這樣可以做出圓心在矩形中心,半徑為 300 的顏色,設置這個顏色,運行,就是上面的圖片
參見:(圖形篇2) 幾何圖形CanvasGeometry
本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。
細數整個手機行業的發展,我們發現,自從喬布斯用滑動改變了手機固有的交互方式之后,手機似乎越來越趨于同一個方向發展,手機的差異化也變得越來越艱難。手機的材質更是經歷了從玻璃到金屬,又到玻璃的無限循環,整個行業也仿佛進入了一個很難創新的瓶頸期,而這個時期的產品都很難形成高度差異化。
2018年,似乎手機審美的風向標又轉會了雙玻璃機身,而除了更加輕薄之外,如何做出高度差異化的產品也是整個行業一直在思考的問題。在榮耀10之前,整個行業似乎都沒有一款讓人眼前一亮的作品。直到榮耀漸變色的出現。
世間本就沒有絕對純粹的顏色,顏色自然的過度才最令人著迷。榮耀10完美的將背部玻璃和極光漸變色相結合,在不同的光線條件下,甚至在不同的地點都能得到完全不同的顏色展現。這一特性完全符合現如今張揚個性的年輕人屬性,也讓這一代的榮耀10成為了一款不折不扣的“科技潮品”。
榮耀10對于行業的思考使得漸變色成為了今年市場的新主流,也成就了今年科技的潮流風向,也讓榮耀年輕潮流的品牌形象更加深入人心,配合上榮耀一貫的超高品質,榮耀10也稱為真正屬于年輕人的“科技潮品”。年輕當然就要有不同的顏色,而顏色也成為了這個時代的新生命力。
【戲金】成為越來越多人的代名詞,“人生如此,全靠演技”這也是年輕人對于生活切切實實的感慨,也是屬于這個年代的年輕人該有的活力。【剁手紅】象征著熱情,在這個紛擾的世界,敢愛敢恨,遇到喜歡的就瘋狂剁手,也是這個時代賦予年輕人的獨特魅力。【相青】已經讓綠色不再是“原諒綠”,這是一個已經連90后都需要“相親”被逼婚的時代,愿得一人心,免得總“相青”。此次榮耀也聯合京東用十種顏色描繪青春,聯合舉行超級品牌日打造屬于年輕人的狂歡!
此次5月7日榮耀“十分好色”京東超級品牌日的活動力度可謂空前強大,作為明星機型的榮耀10也會在超品日上亮相,開啟新一輪的搶購模式,2599元起的售價也讓榮耀10在同價位段的競爭力空前,此次全面開啟搶購一定不容錯過。同時榮耀還與京東聯合開展了關注店鋪領取1000元手機優惠券的活動,同時榮耀的爆品立省500元,現在入手可謂非常劃算。
對于榮耀的老款機型,榮耀V10通過領券后價格將低至2399元,而榮耀7A和7X的部分版本也分別由50元和100元的優惠。在10、16、20、22點購機還有機會贏DW手表一塊。力度空前的活動配合上本就很高的性價比,也讓榮耀產品在該價位的競爭力愈發強烈,也讓真正屬于年輕人的“科技潮品”遍布到更多的角落。