應用有時需要將圖形繪製到並不立即顯示的目標上。此類繪製動作被稱作「幕後繪製」或「繪製到紋理」。當應用需要將繪製操作輸出儲存到乙個檔案、返回為乙個畫素陣列或留作後續操作的輸入源時,常需要進行這種幕後繪製。
通過使用 win2d 中的 canvasrendertarget 可以輕鬆實現以上場景。
canvasrendertarget
派生自 canvasbitmap ,包含乙個名為 createdrawingsession()的方法。是用createdrawingsession
方法可以把圖形內容繪製到乙個 canvasrendertarget。例如:
canvasdevice device =canvasdevice.getshareddevice();canvasrendertarget offscreen = new canvasrendertarget(device, width, height, 96
);using (canvasdrawingsession ds =offscreen.createdrawingsession())
注意上述示例中呼叫了乙個clear
方法。不呼叫此方法,點陣圖則會以未定義內容進行初始化。通過 canvasrendertarget 建立的繪圖會話 (drawing sessions) 與 win2d 提供的 xaml 控制項建立的繪圖會話對clear
(清除)行為的處理是不同的。這種差異使得應用可以對(多個) canvasrendertarget 進行增量修改,而不必每次都重繪整個場景。
要把乙個 canvasrendertarget 繪製到另乙個繪製會話上,只需呼叫drawimage(icanvasimage) 方法或其任意乙個過載即可。例如:
voidcanvascontrol_draw(canvascontrol sender, canvasdraweventargs args)
canvasrendertarget 繼承了 igraphicseffectsource 介面,因此還可以把乙個 canvasrendertarget 作為輸入源,傳入到乙個特效 (effect)進行使用。例如:
gaussianblureffect blureffect = newgaussianblureffect()
;
應用能夠在乙個 canvasrendertarget 上多次反覆關閉、重開(多個)繪製會話。
在繪製會話物件被釋放之前,繪製操作都不會應用到 canvasrendertarget。在 c# 裡,使用using
語句塊就能妥善處理這一問題。
另外值得一提的是 canvasrendertarget 並不是乙個 xaml 控制項,它與 xaml 元素樹完全無關。因此它適用於任何 xaml 或非 xaml 應用。
Win2D 官方文章系列翻譯 畫素格式
directxpixelformat 列舉 包含了 direct3d 和 dxgi 所使用全部各種畫素格式,但其中只有部分被 win2d 所支援 或被 win2d 構建的基礎 direct2d 所支援 如果不確定該採用哪種格式,預設選擇b8g8r8a8uintnormalized作為畫素格式以及pr...
Win2D 官方文章系列翻譯 預乘 Alpha
在計算機繪圖中有兩種表示顏色值不透明度的方法。win2d 中兩種方法均有所採用。本文旨在解釋兩種方法之間的區別以及其各自的使用場景。直接 alpha straight alpha 當使用直接,亦即線性 alpha 時 在該方法中,rgb 和 alpha 通道各自獨立發揮作用。它們可以在不互相影響的情...
Win2D 官方文章系列翻譯 調整控制項解析度
解析度與控制項縮放 本文中所用的 解析度 一詞,是指位圖的尺寸 高寬 win2d xaml 控制項繪製的物件均有解析度和 dpi 這兩項屬性。物件的 dpi 指示了繪製時其構成畫素的密度。dpi 就像縮放因數 dpi 越高則繪製物件構成的畫素數越多 反之,dpi 越低,其構成畫素數就越少。有關一般 ...