本手冊(cè)主要介紹CImg庫主要的類和函數(shù):
類庫結(jié)構(gòu)
CImg僅包含一個(gè)頭文件CImg.h辖所;提供了一系列的C++模板類惰说,實(shí)現(xiàn)了單個(gè)圖像和圖像序列的加載、保存奴烙、處理助被、顯示等功能剖张;這樣的新穎設(shè)計(jì)有如下好處:
- 不需要預(yù)處理;
- 不需要處理復(fù)雜的文件依賴關(guān)系(可能作者對(duì)此的怨念很深)揩环;僅需在需要使用CImg的文件中包含CImg.h即可搔弄;
- 只有應(yīng)用真正用到的函數(shù)會(huì)被編譯進(jìn)最終的程序品嚣;
- 類成員和類函數(shù)都是內(nèi)聯(lián)的矛绘,運(yùn)行的時(shí)候會(huì)有更高的執(zhí)行效率屈暗;
CImg庫代碼組織如下:
- 所有的類和方法都定義在
cimg_library
命名空間榛做;來避免類和函數(shù)的重名秒拔;使用的時(shí)候可以使用下面的代碼引入該命名空間:
#include "CImg.h"
using namespace cimg_library;
...
- 命名空間
cimg_library::cimg
定義了CImg的一系列底層函數(shù)和變量敬肚;可以使用該命名空間里面的函數(shù)淹魄,但是不要直接引用該命名空間籍铁,因?yàn)樵撁臻g里面定義了一系列C/C++標(biāo)準(zhǔn)庫已經(jīng)定義過的函數(shù)郁妈; - 類
cimg_library::CImg<T>
用來存儲(chǔ)最高4緯的圖像數(shù)據(jù)浑玛;T定義了像素值類型,這是CImg
庫最重要的類噩咪; - 類
cimg_library::CImgl<T>
用來表示圖像序列顾彰; - 類
cimg_library::CImgDisplay
用來將圖像和圖像集合顯示到屏幕窗口;該類實(shí)現(xiàn)雖然高度依賴操作系統(tǒng)胃碾,但是對(duì)使用者透明涨享;cimg_environment
章節(jié)會(huì)介紹跟顯示有關(guān)的環(huán)境變量,這些環(huán)境變量在編譯的時(shí)候會(huì)被CImg自動(dòng)設(shè)置仆百; - 類
cimg_library::CImgStats
用來表示圖像統(tǒng)計(jì)信息厕隧;使用它可以快速得到圖像的最大值、最大值像素座標(biāo)俄周、最小值吁讨、最小值像素座標(biāo)、平均值峦朗、方差等統(tǒng)計(jì)數(shù)據(jù)挡爵; - 類
cimg_library::CImgException
以及它的子類定義了程序運(yùn)行時(shí)的異常;
了解了上述五個(gè)類就足夠開始使用CImg的函數(shù)甚垦。
CImg使用示例程序
下面是一個(gè)非常簡(jiǎn)單的示例程序,它創(chuàng)建了一個(gè)顯示“Hello World”文字的圖片涣雕,從中你能了解CImg最基本的使用艰亮;
#include "CImg.h"
using namespace cimg_library;
int main() {
CImg<unsigned char> img(640,400,1,3); // Define a 640x400 color image with 8 bits per color component.
img.fill(0); // Set pixel values to 0 (color : black)
unsigned char purple[3]={255,0,255}; // Define a purple color
img.draw_text("Hello World",100,100,purple); // Draw a purple "Hello world" at coordinates (100,100).
img.display("My first CImg code"); // Display the image in a display window.
return 0;
}
也可以寫的更緊湊一些:
#include "CImg.h"
using namespace cimg_library;
int main() {
const unsigned char purple[3]={255,0,255};
CImg<unsigned char>(640,400,1,3,0).draw_text("Hello World",100,100,purple).display("My first CImg code");
return 0;
}
使用CImg
可以寫出非常緊湊的代碼,CImg
能夠用非常簡(jiǎn)單的代碼實(shí)現(xiàn)一系列實(shí)用的圖像處理操作挣郭;
編譯
CImg
非常輕量和和易于使用迄埃;除了標(biāo)準(zhǔn)的系統(tǒng)函數(shù)外,沒有其他依賴兑障,這樣就避免了在編譯階段處理復(fù)雜的依賴關(guān)系侄非;每個(gè)發(fā)布的CImg
版本可以在如下編譯器下編譯通過:
- <b>Microsoft Visual C++ 6.0 and Visual Studio.NET</b> :
CImg
庫提供了相關(guān)的參考工程文件蕉汪; - <b>Intel ICL compiler</b> : 使用如下命令在ICL下編譯基于
CImg
的程序:
icl /Ox hello_world.cpp user32.lib gdi32.lib
- <b>Digital Mars Compiler</b> : 使用如下命令在DMC下編譯基于
CImg
的程序:
dmc -Ae hello_world.cpp gdi32.lib
- <b>g++ (MingW windows version)</b> : 使用如下命令在MingW g++下編譯基于
CImg
的程序:
// Windows下:
g++ -o hello_word.exe hello_word.cpp -O2 -lgdi32
- <b>g++ (Linux version)</b> : 使用如下命令在Linux g++下編譯基于
CImg
的程序 :
g++ -o hello_word.exe hello_world.cpp -O2 -L/usr/X11R6/lib -lm -lpthread -lX11
- <b>g++ (Solaris version)</b> : 使用如下命令在g++(Solaris)下編譯基于
CImg
的程序 :
g++ -o hello_word.exe hello_world.cpp -O2 -lm -lpthread -R/usr/X11R6/lib -lrt -lnsl -lsocket
- <b>g++ (Mac OS X version)</b> : 使用如下命令在g++(Mac)下編譯基于
CImg
的程序:
g++ -o hello_word.exe hello_world.cpp -O2 -lm -lpthread -L/usr/X11R6/lib -lm -lpthread -lX11
- <b>Dev-Cpp</b> :
CImg
庫提供了相關(guān)的參考工程文件.
如果需要支持其他編譯器,請(qǐng)給庫作者寫信逞怨;但是不支持C++模板的編譯器不會(huì)被支持
其他
歡迎反饋在使用CImg中遇到的問題者疤,以及參與完善該文檔。