久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
FreeImage使用方法&FreeImage Tutorial
[打印本頁(yè)]
作者:
bibi
時(shí)間:
2015-4-18 21:19
標(biāo)題:
FreeImage使用方法&FreeImage Tutorial
前言
四大圖像庫(kù):
OpenCV:
功能十分的強(qiáng)大,而且支持目前先進(jìn)的圖像處理技術(shù),體系十分完善,操作手冊(cè)很詳細(xì),手冊(cè)首先給大家補(bǔ)計(jì)算機(jī)視覺(jué)的知識(shí),幾乎涵蓋了近10年內(nèi)的主流算法;
http://sourceforge.net/projects/opencvlibrary/
FreeImage :
非常好用的開(kāi)源圖像庫(kù),支持二十多種類型的圖像和多種圖像處理功能。只需一個(gè)頭文件、一個(gè)靜態(tài)庫(kù)、一個(gè)動(dòng)態(tài)鏈接庫(kù)即可。目前還不支持矢量圖。
C語(yǔ)言的體系,大量使用指針運(yùn)算速度可以保證,內(nèi)含先進(jìn)的多種插值算法。
http://freeimage.sourceforge.net/
CImg :
就一個(gè).h文件所以用起來(lái)很簡(jiǎn)明,但感覺(jué)功能上不如CxImage。
可以與CxImage配合使用,因?yàn)镃Img提供了基于lapack的矩陣運(yùn)算函數(shù)和完善的線性濾波卷積函數(shù),同時(shí)CImg做像素運(yùn)算還是很方便的。
http://cimg.sourceforge.net/
CxImage:
有一個(gè)界面很強(qiáng)的demo程序,
http://www.xdp.it/cximage.htm
FreeImage使用方法
FreeImage
支持
20
多種圖像類型的(如
BMP
、
JPEG
、
GIF
、
PNG
、
TIFF
等)圖像處理庫(kù)。如下圖FreeImage允許的位圖格式:
FreeImage的使用例子好像很少,這里以Visual Studio 2008+SP1為例說(shuō)明怎么使用FreeImage圖形庫(kù)。
FreeImage下載是在
http://freeimage.sourceforge.net/ ,解壓縮后里面有個(gè)Dist的文件夾,這里面的五個(gè)文件就是我們用FreeImage所需要的全部東東了,即FreeImage.lib、FreeImage.dll、FreeImaged.lib、FreeImaged.dll、FreeImage.h,
以d 結(jié)尾的庫(kù)文件用于Debug版本,沒(méi)有的用于Release版本的。
一、新建一個(gè)名稱為FITest的MFC單文檔應(yīng)用程序,
將FreeImage中的Dist文件夾添加到“工具
->選項(xiàng)->項(xiàng)目和解決方案->VC++
目錄”中的“包含文件”與“庫(kù)文件”中;
二、初始化
(1)、在stdafx.h 文件中加入如下代碼:
#include"FreeImage.h"#ifdef _DEBUG#pragma comment(lib, "FreeImaged.lib")#else#pragma comment(lib, "FreeImage.lib")#endif
(2)、例外默認(rèn)情況下,F(xiàn)reeImage 被當(dāng)作動(dòng)態(tài)鏈接庫(kù)。若需用作靜態(tài)鏈接庫(kù),則在應(yīng)用程序類的InitInstance 中調(diào)用
FreeImage_Initialise(0)
來(lái)初始化FreeImage庫(kù)
。
(3)、
重載ExitInstance 并在其中調(diào)用
FreeImage_DeInitialise()
釋放FreeImage 庫(kù)。這個(gè)必須在程序的結(jié)尾處唯一地一次調(diào)用該函數(shù),以清除FreeImage庫(kù)在內(nèi)存中分配的內(nèi)存,不然會(huì)造成很嚴(yán)重的內(nèi)存泄露。
int CFITestApp::ExitInstance()
{
// TODO: 在此添加專用代碼和/或調(diào)用基類
FreeImage_DeInitialise();
return CWinAppEx::ExitInstance();
}
三、讀取圖像
(1)、給CFITestDoc類添加一個(gè)public變量
FIBITMAP *m_handleFI;
在類的構(gòu)造函數(shù)添加 :m_handleFI(NULL) 字樣,即
CFITestDoc::CFITestDoc():m_handleFI(NULL)
{
// TODO: 在此添加一次性構(gòu)造代碼
}
(2)、
給CFITestDoc類添加兩個(gè)函數(shù),
FreeDIB ()和LoadDIB(LPCTSTR lpszPathName, int flag)
函數(shù)代碼如下
FIBITMAP* CFITestDoc::LoadDIB(LPCTSTR lpszPathName, int flag)
{
FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
fif = FreeImage_GetFileType(lpszPathName); // ansi情況下,LPCTSTR 就是 const char*, 是常量字符串
if(fif == FIF_UNKNOWN)
fif = FreeImage_GetFIFFromFilename(lpszPathName);
if((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif))
{
FIBITMAP *dib = FreeImage_Load(fif,lpszPathName, flag);
return dib;
}
return NULL;
}
void CFITestDoc::FreeDIB(void)
{
if(m_handleFI)
{
FreeImage_Unload(m_handleFI);// 釋放位圖
m_handleFI = NULL;
}
}
(3)、在析構(gòu)函數(shù)中釋放位圖
CFITestDoc::~CFITestDoc()
{
FreeDIB();
}
(4)、為
CFITestDoc類添加ID_FILE_OPEN的COMMAND事件響應(yīng)函數(shù)OnFileOpen()
void CFITestDoc::OnFileOpen()
{
FIBITMAP* pFI = NULL;
CString szFilter("BMP file(*.bmp)|*.bmp|GPEG file(*.jpg)|*.jpg|All files(*.*)|*.*||");
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY, szFilter);
if(dlg.DoModal() == IDOK)
{
CString strPath = dlg.GetPathName();
pFI = LoadDIB(strPath, 0);
if(pFI)
{
FreeDIB();// 釋放以前的位圖
m_handleFI = pFI;// 指向新位圖
UpdateAllViews (NULL);
}
}
}
四、顯示圖像
在視圖類CFITestView中的OnDraw()函數(shù)添加代碼
void CFITestView::OnDraw(CDC* pDC) //記得去掉注釋掉的pDC
{
CFITestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此處為本機(jī)數(shù)據(jù)添加繪制代碼
FIBITMAP *pFI = pDoc->m_handleFI;
if(pFI)
{
BYTE* pBits = FreeImage_GetBits(pFI);
BITMAPINFO* pIf=FreeImage_GetInfo(pFI);
int W = FreeImage_GetWidth(pFI);
int H = FreeImage_GetHeight(pFI);
CRect rectClient;GetClientRect(rectClient);
int dstW = rectClient.Width();
int dstH = rectClient.Height();
::SetStretchBltMode(pDC->GetSafeHdc(),COLORONCOLOR);
if(dstW == W && dstH == H)
{
::SetDIBitsToDevice(pDC->GetSafeHdc(),0,0, W, H,0,0,0, H,pBits,pIf,DIB_RGB_COLORS);
}
else {// 按比例縮放
float fScale=(float)(W*dstH)/(float)(H*dstW);
if(fScale > 1.0f)
dstH = (int) (dstH / fScale);
else
dstW = (int) (dstW * fScale);
::StretchDIBits(pDC->GetSafeHdc(),0,0,dstW,dstH,0,0,W,H,pBits,pIf,DIB_RGB_COLORS,SRCCOPY);
}
}
}
五、調(diào)試程序
調(diào)試程序要注意了,可能在
LoadDIB
函數(shù)中出現(xiàn)錯(cuò)誤,提示LPCTSTR不能轉(zhuǎn)換成const char * ,本來(lái)在ANSI下兩者是一樣的,設(shè)置一下項(xiàng)目屬性。
按Alt+F7快捷鍵,如下圖,設(shè)置字符集為【使用多字節(jié)字符集】
記得把FreeImaged.dll拷貝到...\FITest\Debug下,F(xiàn)reeImage.dll拷貝到...\FITest\Release目錄下。或都拷貝到C:\WINDOWS\system32\下也行。
按Ctrl+F5運(yùn)行程序。
點(diǎn)擊 【文件】->【打開(kāi)】打開(kāi)一張圖片。。。。。。。
參考資料:
源代碼:
http://freeimage.sourceforge.net/
FreeImage 3.8.0 中文文檔
http://cdnetworks-kr-2.dl.sourceforge.net/project/freeimage/Source%20Documentation/3.8.0/FreeImage380Chinese.pdf
Internet ...
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产小视频在线播放
|
一级毛片大全
|
欧洲av在线
|
www.天天操
|
四虎影院在线播放
|
一区二区三区在线播放
|
一级毛片在线看
|
免费一级a毛片
|
久久天天躁狠狠躁夜夜躁2014
|
在线观看日韩欧美
|
欧美日韩精品一区二区
|
一区在线观看视频
|
天天色小说
|
可以免费看的av
|
成人免费看
|
日韩av导航
|
wwwxxx欧美
|
日日狠狠
|
国产欧美日韩在线
|
97精品在线视频
|
久久精品久久久
|
www.av在线播放
|
国产精品视频99
|
国产精品综合
|
夜夜草导航
|
亚洲免费二区
|
四虎1515
|
夜夜操天天
|
九九热在线播放
|
久久久三级
|
精品少妇v888av
|
在线播放h
|
91亚洲视频
|
一区二区三区精品
|
国产三级在线观看视频
|
亚洲最大黄色网址
|
一区二区欧美日韩
|
国产精品久久久久久无人区
|
国产日韩欧美亚洲
|
一区二区自拍
|
99热在线观看
|