本文講述 Cairo 圖形庫中一些有用的定義/概念,理解它們可以幫助你更好的理解 Cairo 繪圖模型。
環境 (Context)
使用 Cairo 繪圖,必須要首先創建 Cairo 環境 (Context)。Cairo 環境保存著所有的圖形狀態參數,這些參數描述了圖形的構成,譬如線條寬度、顏色、要繪製的外觀 (Surface) 以及其它一些信息。Cairo 環境允許真正的繪圖函數使用很少的一部分參數,以此提高接口的易用性。調用 gdk_cairo_create () 函數可為所繪製的圖形創建一個 Cairo 環境。
cr = gdk_cairo_create (widget->window);
這兩行代碼創建了一個 Cairo 環境,並且這個 Cairo 環境是關聯到 GdkDrawable 對象上的。cairo_t 結構體包含了當前渲染設備的狀態,也包含了所繪製圖形的坐標。從技術上來講,cairo_t 就是所謂的 Cairo 環境。
Cairo 所有的繪圖函數都要去操作 cairo_t 對象。一個 Cairo 環境可以被關聯到一種特定的外觀,譬如 pdf、svg、png、GdkDrawable 等。
GDK 沒有對 Cairo API 進行封裝,它只允許創建一個可基於 GdkDrawable 對象繪製圖形的 Cairo 環境。有一些 GDK 函數可以將 GDK 的矩形或填充區域轉換為 Cairo Path (路徑),然後使用 Cairo 繪圖與渲染。
路徑 (Path)
一條 Path(路徑)通常是由一條或多條首位相接的直線段構成的,也可以由直線段與曲線段構成。路徑可分為 Open(開放)類型與 Closed(閉合)類型,前者的首尾端點不重合,後者的首尾端點重合。
在 Cairo 中,繪圖要從一條空路徑開始,首先定義一條路徑,然後通過繪製/填充操作使之可見。要注意的是,每次調用 cairo_stroke () 或 cairo_fill () 函數之後,路徑會被清空,不得不再定義新的路徑。
一條路徑可由一些子路徑構成。
源 (Source)
源好比繪圖中所使用的畫筆/顏料,使用它來繪製/填充圖形輪廓。有 4 種基本的源:color、gradient、pattern 與 image。
外觀 (Surface)
Surface 就是要繪製圖形的最終體現形式,譬如可使用 PDF 或 PostScript 外觀實現文本內容的渲染,或者使用 Xlib、Win32 外觀實現屏幕繪圖。
Cairo 具體有那些外觀類型,可參考其定義:
CAIRO_SURFACE_TYPE_IMAGE,
CAIRO_SURFACE_TYPE_PDF,
CAIRO_SURFACE_TYPE_PS,
CAIRO_SURFACE_TYPE_XLIB,
CAIRO_SURFACE_TYPE_XCB,
CAIRO_SURFACE_TYPE_GLITZ,
CAIRO_SURFACE_TYPE_QUARTZ,
CAIRO_SURFACE_TYPE_WIN32,
CAIRO_SURFACE_TYPE_BEOS,
CAIRO_SURFACE_TYPE_DIRECTFB,
CAIRO_SURFACE_TYPE_SVG,
CAIRO_SURFACE_TYPE_OS2
} cairo_surface_type_t;
蒙板 (Mask)
在源作用於外觀之前,可對其實現過濾,蒙板 (mask) 即是過濾器。蒙板決定哪些源可被顯示。蒙板不透明的部分允許複製源至外觀,蒙板透明的部分則禁止複製源至外觀。
圖案 (Pattern)
圖案表示被繪製到外觀的源。在 Cairo 中,圖案是一種可以讀取的內容,可用作繪圖操作的源或蒙板。圖案可以是純色模式、基於外觀的模式以及漸變模式。
沒有留言:
張貼留言