在 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 通道各自獨立發揮作用。它們可以在不互相影響的情...