win2d 漸變顏色

2022-01-15 01:16:16 字數 3987 閱讀 3908

在 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

;canvasgradientstop[1] = new canvasgradientstop()

;

建立 canvaslineargradientbrush 需要 canvasresourcecreator ,建議使用 win2d 的畫板作為輸入。

private

void

canvascontrol_ondraw(canvascontrol sender, canvasdraweventargs args)

// 忽略**

var canvasgradientstop = new canvasgradientstop[2];

canvasgradientstop[0] = new canvasgradientstop

;canvasgradientstop[1] = new canvasgradientstop()

;var canvaslineargradientbrush = new canvaslineargradientbrush(sender, canvasgradientstop)

;

這裡開始的點和結束的點都是相對於畫布的座標,而不是相對於使用顏色的元素。

這時建立乙個矩形使用顏色,先設定他的座標是 200,200,在點選按鈕的時候移動矩形,可以看到矩形在移動的時候顏色在變化

如果需要在元素內做元素漸變,就需要修改 canvaslineargradientbrush 的 startpoint 和 endpoint,讓 startpoint 為元素的左上角加上的值。

也就是在原先的開始和最後的點都加上元素才可以進行元素的變化。

例如矩形是已知的,想要讓矩形從上到下是漸變,就可以使用下面**

var rect = new rect(x, y, 300, 300);

var canvaslineargradientbrush = new canvaslineargradientbrush(sender, canvasgradientstop)

;args.drawingsession.fillrectangle(rect, canvaslineargradientbrush);

從上面**可以知道畫出來的漸變需要開始的點和結束的點都是從 rect 計算,這樣才可以做元素內的漸變

全部**

xaml

xmlns:win2d="using:microsoft.graphics.canvas.ui.xaml"

忽略的**

"canvascontrol_ondraw">相信大家都可以建立乙個 win2d 的控制項,如果還不知道如何建立,請看win10 uwp win2d 入門 看這一篇就夠了

在後台**

使用這個顏色需要使用 canvasradialgradientbrush ,在建立的使用需要傳入 canvasresourcecreator 因為在 win2d 控制項的畫函式,所以使用下面**

var canvasradialgradientbrush = new canvasradialgradientbrush(sender, canvasgradientstop);
這裡的 canvasgradientstop 還是上面的 canvasgradientstop ,但是需要知道這裡的 position 對應的是從圓心到最外面。

var canvasgradientstop = new canvasgradientstop[2];

canvasgradientstop[0] = new canvasgradientstop

;canvasgradientstop[1] = new canvasgradientstop()

;

所以我設定了圓心為#d2c8a2顏色,把最外面寫為黑色,這樣就可以做出上面看到的顏色

在圓圈需要設定圓心所在的座標,這個座標就是相對畫布的,所以不是相對元素

為了讓矩形的中心設定的顏色,我需要修改**

var canvasradialgradientbrush = new canvasradialgradientbrush(sender, canvasgradientstop)

;

因為可以使用橢圓,所以需要設定 radiusx 就是圓的水平半徑和 radiusy 這個我也不知道什麼的值。

這樣可以做出圓心在矩形中心,半徑為 300 的顏色,設定這個顏色,執行,就是上面的

參見:第四章(圖形篇2) 幾何圖形canvasgeometry

Win2D 官方文章系列翻譯 畫素格式

directxpixelformat 列舉 包含了 direct3d 和 dxgi 所使用全部各種畫素格式,但其中只有部分被 win2d 所支援 或被 win2d 構建的基礎 direct2d 所支援 如果不確定該採用哪種格式,預設選擇b8g8r8a8uintnormalized作為畫素格式以及pr...

Win2D 官方文章系列翻譯 幕後繪製

應用有時需要將圖形繪製到並不立即顯示的目標上。此類繪製動作被稱作 幕後繪製 或 繪製到紋理 當應用需要將繪製操作輸出儲存到乙個檔案 返回為乙個畫素陣列或留作後續操作的輸入源時,常需要進行這種幕後繪製。通過使用 win2d 中的 canvasrendertarget 可以輕鬆實現以上場景。canvas...

Win2D 官方文章系列翻譯 預乘 Alpha

在計算機繪圖中有兩種表示顏色值不透明度的方法。win2d 中兩種方法均有所採用。本文旨在解釋兩種方法之間的區別以及其各自的使用場景。直接 alpha straight alpha 當使用直接,亦即線性 alpha 時 在該方法中,rgb 和 alpha 通道各自獨立發揮作用。它們可以在不互相影響的情...