亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

利用C語(yǔ)言的Cairo圖形庫(kù)繪制太極圖實(shí)例教程

 更新時(shí)間:2016年12月20日 11:10:42   作者:hai0808  
這幾天都在研究Cairo圖形庫(kù),這是一個(gè)開(kāi)源跨平臺(tái)的圖形庫(kù),相對(duì)于OpenGL來(lái)說(shuō)更容易上手使用。這篇文章是利用C語(yǔ)言的Cairo圖形庫(kù)繪制了一個(gè)太極圖,對(duì)大家學(xué)習(xí)Cairo圖形庫(kù)具有一定的參考借鑒價(jià)值,下面來(lái)一起看看吧。

前言

可能許多人對(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)。或許有人會(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)線 */ 
 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"); 
 /* 銷毀并退出Cairo繪圖環(huán)境 */ 
 cairo_destroy(cr); 
 cairo_surface_destroy (surface); 
 
 return 0; 
} 

代碼非常之簡(jiǎn)單吧,借此拋磚引玉,希望更多的人會(huì)喜歡上Cario圖形庫(kù)。GCC編譯的話,可以參考如下的命令。

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)大家可以留言交流。

相關(guān)文章

  • C語(yǔ)言與C++中內(nèi)存管理詳解

    C語(yǔ)言與C++中內(nèi)存管理詳解

    本章主要介紹C語(yǔ)言與C++的內(nèi)存管理,以C++的內(nèi)存分布作為引入,介紹C++不同于C語(yǔ)言的內(nèi)存管理方式(new?delete對(duì)比?malloc?free),感興趣的朋友來(lái)看看吧
    2022-04-04
  • C語(yǔ)言設(shè)計(jì)圖書登記系統(tǒng)與停車場(chǎng)管理系統(tǒng)的實(shí)例分享

    C語(yǔ)言設(shè)計(jì)圖書登記系統(tǒng)與停車場(chǎng)管理系統(tǒng)的實(shí)例分享

    這篇文章主要介紹了C語(yǔ)言設(shè)計(jì)圖書登記系統(tǒng)與停車場(chǎng)管理系統(tǒng)的實(shí)例分享,重在以最簡(jiǎn)單的一些需求來(lái)展示管理系統(tǒng)的設(shè)計(jì)思路,需要的朋友可以參考下
    2016-06-06
  • C++實(shí)現(xiàn)對(duì)RGB圖片進(jìn)行編碼的示例代碼

    C++實(shí)現(xiàn)對(duì)RGB圖片進(jìn)行編碼的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用得到的RGB信息重新對(duì)RGB圖片進(jìn)行編碼,以及對(duì)其他圖片如BMP所得到的RGB信息進(jìn)行編碼從而得到*.jpg文件,感興趣的可以了解一下
    2023-05-05
  • Qt基于QScrollArea實(shí)現(xiàn)界面嵌套移動(dòng)

    Qt基于QScrollArea實(shí)現(xiàn)界面嵌套移動(dòng)

    在實(shí)際的應(yīng)用場(chǎng)景中,經(jīng)常會(huì)出現(xiàn)軟件界面戰(zhàn)場(chǎng)圖大于實(shí)際窗體大小。本文將利用QScrollArea可以為widget窗體添加滾動(dòng)條,實(shí)現(xiàn)界面嵌套移動(dòng),感興趣的可以了解一下
    2022-06-06
  • C語(yǔ)言宏定義的擴(kuò)展定義講解

    C語(yǔ)言宏定義的擴(kuò)展定義講解

    這篇文章主要介紹了C語(yǔ)言宏定義的擴(kuò)展,宏定義是C語(yǔ)言提供的三種預(yù)處理功能的其中一種,這三種預(yù)處理包括:宏定義、文件包含、條件編譯
    2022-12-12
  • C++實(shí)現(xiàn)讀寫ini配置文件的示例代碼

    C++實(shí)現(xiàn)讀寫ini配置文件的示例代碼

    配置文件的讀取是每個(gè)程序必備的功能,配置文件的格式多種多樣,例如:ini格式、json格式、xml格式等。其中屬ini格式最為簡(jiǎn)單,且應(yīng)用廣泛。本文和大家分享了C++讀寫ini配置文件的方法,需要的可以參考一下
    2023-05-05
  • C++11中的智能指針和垃圾回收使用

    C++11中的智能指針和垃圾回收使用

    本文主要介紹了C++11中的智能指針和垃圾回收使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • C++空類詳解

    C++空類詳解

    以下是對(duì)C++中的空類進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • C++中的三大函數(shù)和操作符重載(Boolan)

    C++中的三大函數(shù)和操作符重載(Boolan)

    本文主要介紹了C++中的三大函數(shù)和操作符重載(Boolan)的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • 針對(duì)Ruby的Selenium WebDriver安裝指南

    針對(duì)Ruby的Selenium WebDriver安裝指南

    這篇文章主要介紹了針對(duì)Ruby的Selenium WebDriver安裝指南,Selenium直接運(yùn)行于瀏覽器之中,是進(jìn)行各種調(diào)試的一大神器,需要的朋友可以參考下
    2015-07-07

最新評(píng)論