C++基於向量圖形庫cairo繪圖圖形,向量圖形cairo
//sudo apt-get install libcairo2-dev//pkg-config --cflags --libs cairo//-I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -lcairo#include <iostream>#include <cairo-svg.h>#define ANGLE(ang) (ang * 3.1415926 / 180.0) int main(int argc, char **argv) { cairo_t *cr; cairo_surface_t *surface; int cheight = 400, cwidth = cheight; surface = (cairo_surface_t *)cairo_svg_surface_create("Cairo_example.svg", cheight, cwidth); cr = cairo_create(surface); cairo_pattern_t *pattern; cairo_text_extents_t text; int x,y; //填充背景黑色 cairo_set_source_rgb (cr, 0, 0, 0); cairo_rectangle(cr, 0, 0, cwidth, cheight); cairo_fill(cr);// cairo_set_source_rgb (cr, 0.5, 0.5, 0.5);// pattern = cairo_pattern_create_radial(50, 50, 5, 50, 50, 50);// cairo_pattern_add_color_stop_rgb(pattern, 0, 0.75, 0.15, 0.99);// cairo_pattern_add_color_stop_rgb(pattern, 0.9, 1, 1, 1);// cairo_set_source(cr, pattern);// cairo_fill(cr); /* Writing in the foreground */ cairo_set_font_size (cr, 15); cairo_select_font_face (cr, "Georgia", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_source_rgb (cr, 0, 0, 1); cairo_move_to(cr, 10, 25); cairo_show_text(cr, "你好"); cairo_move_to(cr, 10, 75); cairo_show_text(cr, "Wikipedia!"); cairo_set_source_rgb ( cr, 0, 1, 0 ); cairo_set_antialias(cr, CAIRO_ANTIALIAS_GOOD); cairo_set_line_width(cr, 2); cairo_move_to(cr, 30, 10); cairo_line_to(cr, 100, 80); cairo_stroke(cr); cairo_move_to(cr, 30, 10); cairo_line_to(cr, 230, 80); cairo_stroke(cr); cairo_rectangle_int_t rect; rect.x = 200; rect.y = 200; rect.width = 180; rect.height = 160; cairo_rectangle(cr, rect.x, rect.y, rect.width, rect.height); cairo_stroke(cr); //cairo_fill(cr); cairo_set_source_rgba(cr, 1, 0, 1, 0.5); cairo_set_line_width(cr, 15); int cx = 250, cy = 250, R = 130; cairo_arc(cr, cx, cy, R, ANGLE(0), ANGLE(360)); cairo_stroke(cr); cairo_surface_write_to_png ( surface, "demo1.png" ) ; cairo_destroy (cr); cairo_surface_destroy (surface); return 0;}
Ubuntu下的編譯:
g++ `pkg-config --cflags cairo` test_cairo.cpp `pkg-config --libs cairo`
注意:上面的符號`,不是單引號,而是鍵盤上ESC鍵的下面, !/1鍵的左邊的按鍵.
運行結果:
下列對於“向量圖形”與“位元影像映像”的說法正確的是
向量映像,也稱為物件導向的映像或繪圖映像,在數學上定義為一系列由線串連的點。向量檔案中的圖形元素稱為對象。每個對象都是一個自成一體的實體,它具有顏色、形狀、輪廓、大小和螢幕位置等屬性。既然每個對象都是一個自成一體的實體,就可以在維持它原有清晰度和彎曲度的同時,多次移動和改變它的屬性,而不會影響圖例中的其它對象。這些特徵使基於向量的程式特別適用於圖例和三維建模,因為它們通常要求能建立和操作單個對象。基於向量的繪圖同解析度無關。這意味著它們可以按最高解析度顯示到輸出裝置上。
何謂位元影像映像?
與上述基於向量的繪圖程式相比,像 Photoshop 這樣的編輯照片程式則用於處理位元影像映像。當您處理位元影像映像時,可以最佳化微小細節,進行顯著改動,以及增強效果。位元影像映像,亦稱為點陣映像或繪製映像,是由稱作像素(圖片元素)的單個點組成的。這些點可以進行不同的排列和染色以構成圖樣。當放大位元影像時,可以看見賴以構成整個映像的無數單個方塊。擴大位元影像尺寸的效果是增多單個像素,從而使線條和形狀顯得參差不齊。然而,如果從稍遠的位置觀看它,位元影像映像的顏色和形狀又顯得是連續的。由於每一個像素都是單獨染色的,您可以通過以每次一個像素的頻率操作選擇地區而產生近似相片的逼真效果,諸如加深陰影和加重顏色。縮小位元影像尺寸也會使原圖變形,因為此舉是通過減少像素來使整個映像變小的。同樣,由於位元影像映像是以排列的像素集合體形式建立的,所以不能單獨操作(如移動)局部位元影像。
為什麼處理位元影像時要著重考慮解析度?
處理位元影像時,輸出映像的品質決定於處理過程開始時設定的解析度高低。解析度是一個籠統的術語,它指一個影像檔中包含的細節和資訊的大小,以及輸入、輸出、或顯示裝置能夠產生的細節程度。操作位元影像時,解析度既會影響最後輸出的品質也會影響檔案的大小。處理位元影像需要三思而後行,因為給映像選擇的解析度通常在整個過程中都伴隨著檔案。無論是在一個300 dpi的印表機還是在一個2570dpi的照排裝置上印刷位元影像檔案,檔案總是以建立映像時所設的解析度大小印刷,除非印表機的解析度低於映像的解析度。如果希望最終輸出看起來和螢幕上顯示的一樣,那麼在開始工作前,就需要瞭解映像的解析度和不同裝置解析度之間的關係。顯然向量圖就不必考慮這麼多。
向量圖與位元影像的區別
向量圖形使用函數來記錄圖形中的顏色,尺寸等屬性。物體的任何放大和縮小,都不會使映像失真和降低品質。也不會對檔案的大小有影響。向量圖形表現清晰的輪廓,常用於製作一些標誌圖形。
位元影像映像是很多的彩色網格來拼成一幅映像的,每個網格稱為一個像素,像素都有特定的位置和顏色值。如果位元影像映像放大後會發現有馬賽克一樣的一個個像素
參考資料:zhidao.baidu.com/question/7872725.html
10下面對於向量圖形與位元影像映像的說法錯誤的是:( )
答案:D。一般來說向量圖佔用的位元數比位元影像要少。這是向量圖一優勢之一
補充:flash是不能建立位元影像的