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

2022-03-11 04:52:24 字數 1425 閱讀 1855

應用有時需要將圖形繪製到並不立即顯示的目標上。此類繪製動作被稱作「幕後繪製」或「繪製到紋理」。當應用需要將繪製操作輸出儲存到乙個檔案、返回為乙個畫素陣列或留作後續操作的輸入源時,常需要進行這種幕後繪製。

通過使用 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) 方法或其任意乙個過載即可。例如:

void

canvascontrol_draw(canvascontrol sender, canvasdraweventargs args)

canvasrendertarget 繼承了 igraphicseffectsource 介面,因此還可以把乙個 canvasrendertarget 作為輸入源,傳入到乙個特效 (effect)進行使用。例如:

gaussianblureffect blureffect = new

gaussianblureffect()

;

應用能夠在乙個 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 越低,其構成畫素數就越少。有關一般 ...