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