cario java_Cairo图形库 概述
參考:http://blog.sina.com.cn/s/blog_538732a70100p9ay.html
Cairo圖形庫??1.?概述
歡迎來到Cairo圖形教程.這個教程將教你Cairo
2D矢量繪圖庫基本的和一些高級的主題.大部分例程我們使用GTK+編程庫. 這個教程是用C語言來完成的.
(如果可能,我會附加上一些cairomm的東西)
2D 矢量圖形
有兩種不同的計算機圖形. 矢量和光柵圖形.
光柵圖形作為像素的集合來呈現圖象.矢量圖形是使用諸如點/線/曲線或多邊形等幾何圖元來呈現圖像. 這些圖元使用數學方程來創建.
計算機圖形的兩種類型各有優缺點.矢量圖形比之光柵圖形的優點是:
更小
無限制縮放
移動縮放填充旋轉不會降低圖形的質量
Cairo
Cairo 是一個創建2D矢量圖形的庫. 它是用C編寫的. 和其他計算機語言的綁定有 Python,
Perl, C++, C#, Java. Cairo 是一個多平臺的庫,可工作在linux, BSDs, OSX上.
Cairo 支持多種后臺.
X Window System
Win32 GDI
Mac OS X Quartz
PNG
PostScript
SVG
這意味著,我們可以使用它在Linux/BSDs, Windows,
OSX上繪制,并且我們可以使用它來創建PNG圖像,PDF文件,PostScript文件和SVG文件.
我們可以比較Cairo庫和 Windows上的GDI+ 庫還有Mac
OS上的Quartz 2D. Cairo 是一個開源軟件庫. 從版本2.8開始, cairo
庫就是GTK+系統的一部分了.
Compiling exampes
這個例子用C語言創建. 我們使用GNU C編譯器來編譯它們.
gcc -o example `pkg-config --cflags --libs
gtk+-2.0` example.c
Cairo 定義
在教程的這個部分,我們為Cairo圖形庫提供一些有用的定義.它將幫助我們更好的理解Cairo繪圖模型.
要在Cairo里畫點東西,我們必須先創建一個Cairo上下文(context).Cairo上下文擁有描繪繪制怎樣完成的所有的圖形狀態參數.
它包括諸如線寬/顏色/要繪制到的表面信息,還有很多其它東西. 它允許實際的繪制函數帶較少的參數來簡化接口.
gdk_cairo_create()函數調用為繪制創建一個cairo上下文(context)
cairo_t *cr;
cr = gdk_cairo_create(widget->window);
這兩行創建一個cairo上下文(context). 在這個例子里,上下文綁定到一個GdkDrawable. 一個
cairo_t 結構包含渲染設備的當前狀態,包含已經繪制的形狀的坐標.技術上說,cairo_t對象被稱為Cairo上下文.
所有cairo繪制都是對于cairo_t對象的.
一個Cairo上下文被綁定到一個明確的表面的.一個pdf/svg/png/gdkDrawable等等.
GDK并不封裝Cairo
API.它允許創建一個Cairo上下文,可被用作在GDKdrawable上繪制.有另外的函數允許轉換GDK的矩形和區域到Cairo路徑并使用像素緩沖來做繪制操作.
Path
一條路徑由很多線組成.這些線被兩個或者更多的錨點連接.? 路徑可以由直線段和曲線組成.
有兩種路徑.開放的和閉合的路徑. 在閉合路徑中,起點和終點重合.在開放路徑中,起點和終點不重合.
在Cairo中,我們以一個空路徑開始.首先我們定義一個路徑然后我們通過畫線和填充使之可見.
很重要一點,每次cairo_stroke()或者cairo_fill()函數調用之后,路徑就空了.我們必須定義一條新的路徑.
一條路徑可以由很多子路徑組成.
Source
Source是我們繪制時使用的顏料.我們可以拿source和筆或墨水比較.我們用它們來繪制輪廓或者填充形狀.
有四種基本的source: Colors, gradients, patterns 和 images
Surface
Surface是我們需要繪制到的目標地.
我們可以使用PDF或PostScript表面渲染文檔,直接通過Xlib和Win32表面繪制到一個平臺.
文檔提及下列表面:
typedef enum _cairo_surface_type {
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用作過濾器. Mask決定源應用到哪,不應用到哪.
Mask的不透明部分允許你拷貝源.? 透明部分不讓你拷貝源到表面.
Pattern
一個cairo 樣式描繪了當繪制到表面時的源. 在cairo中,一個樣式就是某種能夠從之讀取并用作一個繪制操作的源或者mask.
樣式可以是實心的,基于表面的,或者甚至是漸變圖案.
總結
以上是生活随笔為你收集整理的cario java_Cairo图形库 概述的全部內容,希望文章能夠幫你解決所遇到的問題。