利用C語(yǔ)言的Cairo圖形庫(kù)繪制太極圖實(shí)例教程
前言
可能許多人對(duì)直接用C語(yǔ)言繪圖仍然停留在Turbo C的graphics.h年代,或許也有教育老化的原因,畢竟曾經(jīng)的經(jīng)典早已成往事,與其想盡各種辦法尋找與其兼容的圖形庫(kù),不如順勢(shì)擁抱燦爛的明天。Cario(http://cairographics.org/)是一個(gè)非常出色的2D圖形庫(kù),著名的GTK+3.0完全采用Cario作為繪圖引擎,由此可見(jiàn)它的強(qiáng)大和吸引力。
Cario支持X Window,Quartz,Win32,image.buffers,PostScript,PDF和SVG文件等多種輸出設(shè)備,開(kāi)源且跨平臺(tái)?;蛟S有人會(huì)覺(jué)得這么強(qiáng)大的東西用起來(lái)一定會(huì)十分的棘手,其實(shí)不然,它所提供的API函數(shù)出乎意料的簡(jiǎn)單易用,這篇文章在這里演示一個(gè)繪圖太極圖的例子,供大家參考。
實(shí)例代碼如下:
#include <cairo.h>
#define SIZE (640) /* 太極圖大小 */
#define CX (SIZE / 2) /* 太極圓中心橫坐標(biāo) */
#define CY (SIZE / 2) /* 太極圓中心縱坐標(biāo) */
#define R (SIZE / 2) /* 太極圓半徑 */
/* 把角度轉(zhuǎn)換為所對(duì)應(yīng)的弧度 */
#define ANGLE(ang) (ang * 3.1415926 / 180.0)
int main(int argc, char *argv[])
{
/* 創(chuàng)建32位RGBA顏色格式的Cairo繪圖環(huán)境,直接在Memory中渲染 */
cairo_surface_t* surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, SIZE + 1, SIZE + 1);
cairo_t* cr = cairo_create(surface);
/* 繪制太極邊框 */
cairo_set_line_width(cr, 2.0);
cairo_set_source_rgba(cr, 0, 0, 0, 1);
cairo_arc(cr, CX, CY, R, ANGLE(0), ANGLE(360));
cairo_stroke(cr);
/* 繪制陰陽(yáng)圓 */
cairo_set_source_rgba(cr, 0, 0, 0, 1);
cairo_arc(cr, CX, CY, R, ANGLE(90), ANGLE(270));
cairo_fill(cr);
cairo_set_source_rgba(cr, 1, 1, 1, 1);
cairo_arc(cr, CX, CY, R, ANGLE(-90), ANGLE(90));
cairo_fill(cr);
/* 繪制陰陽(yáng)線(xiàn) */
cairo_set_source_rgba(cr, 0, 0, 0, 1);
cairo_arc(cr, CX, CY - R / 2, R / 2, ANGLE(-90), ANGLE(90));
cairo_fill(cr);
cairo_set_source_rgba(cr, 1, 1, 1, 1);
cairo_arc(cr, CX, CY + R / 2, R / 2, ANGLE(90), ANGLE(270));
cairo_fill(cr);
/* 繪制太極眼 */
cairo_set_source_rgba(cr, 1, 1, 1, 1);
cairo_arc(cr, CX, CY - R / 2, R / 10, ANGLE(0), ANGLE(360));
cairo_fill(cr);
cairo_set_source_rgba(cr, 0, 0, 0, 1);
cairo_arc(cr, CX, CY + R / 2, R / 10, ANGLE(0), ANGLE(360));
cairo_fill(cr);
/* 將Memory的渲染效果存儲(chǔ)到圖片中 */
cairo_surface_write_to_png(surface, "taichi.png");
/* 銷(xiāo)毀并退出Cairo繪圖環(huán)境 */
cairo_destroy(cr);
cairo_surface_destroy (surface);
return 0;
}
代碼非常之簡(jiǎn)單吧,借此拋磚引玉,希望更多的人會(huì)喜歡上Cario圖形庫(kù)。GCC編譯的話(huà),可以參考如下的命令。
gcc -o taichi $(pkg-config --cflags --libs cairo) taichi.c
運(yùn)行后的效果是這樣的,大家可以試試看。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
上一篇:C++ STL list 遍歷刪除出錯(cuò)解決方案
欄 目:C語(yǔ)言
下一篇:C語(yǔ)言設(shè)計(jì)一個(gè)閃閃的圣誕樹(shù)
本文標(biāo)題:利用C語(yǔ)言的Cairo圖形庫(kù)繪制太極圖實(shí)例教程
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/1935.html
您可能感興趣的文章
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用函數(shù)刪除字符
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)式函數(shù)庫(kù)
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)數(shù)怎么表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫(xiě)分段 用c語(yǔ)言表示分段函數(shù)
- 04-02c語(yǔ)言編寫(xiě)函數(shù)冒泡排序 c語(yǔ)言冒泡排序法函數(shù)
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段函數(shù)
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎么打出三角函數(shù)的值
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求階乘


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫(xiě)分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫(xiě)函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什


