久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10184|回復: 0
打印 上一主題 下一主題
收起左側

FreeImage使用方法&FreeImage Tutorial

[復制鏈接]
跳轉到指定樓層
樓主
ID:77367 發表于 2015-4-18 21:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
前言 四大圖像庫:OpenCV: 功能十分的強大,而且支持目前先進的圖像處理技術,體系十分完善,操作手冊很詳細,手冊首先給大家補計算機視覺的知識,幾乎涵蓋了近10年內的主流算法;
http://sourceforge.net/projects/opencvlibrary/
FreeImage :非常好用的開源圖像庫,支持二十多種類型的圖像和多種圖像處理功能。只需一個頭文件、一個靜態庫、一個動態鏈接庫即可。目前還不支持矢量圖。C語言的體系,大量使用指針運算速度可以保證,內含先進的多種插值算法。
http://freeimage.sourceforge.net/
CImg :就一個.h文件所以用起來很簡明,但感覺功能上不如CxImage。
可以與CxImage配合使用,因為CImg提供了基于lapack的矩陣運算函數和完善的線性濾波卷積函數,同時CImg做像素運算還是很方便的。
http://cimg.sourceforge.net/
CxImage:有一個界面很強的demo程序,
http://www.xdp.it/cximage.htm




FreeImage使用方法


FreeImage支持20 多種圖像類型的(如BMP 、JPEG 、GIF PNG TIFF 等)圖像處理庫。如下圖FreeImage允許的位圖格式:
            

FreeImage的使用例子好像很少,這里以Visual Studio 2008+SP1為例說明怎么使用FreeImage圖形庫。
FreeImage下載是在http://freeimage.sourceforge.net/ ,解壓縮后里面有個Dist的文件夾,這里面的五個文件就是我們用FreeImage所需要的全部東東了,即FreeImage.lib、FreeImage.dll、FreeImaged.lib、FreeImaged.dll、FreeImage.h,以d 結尾的庫文件用于Debug版本,沒有的用于Release版本的。

一、新建一個名稱為FITest的MFC單文檔應用程序,將FreeImage中的Dist文件夾添加到“工具->選項->項目和解決方案->VC++目錄”中的“包含文件”與“庫文件”中;


二、初始化

(1)、在stdafx.h 文件中加入如下代碼:
#include"FreeImage.h"#ifdef _DEBUG#pragma comment(lib, "FreeImaged.lib")#else#pragma comment(lib, "FreeImage.lib")#endif(2)、例外默認情況下,FreeImage 被當作動態鏈接庫。若需用作靜態鏈接庫,則在應用程序類的InitInstance 中調用FreeImage_Initialise(0) 來初始化FreeImage庫
(3)、重載ExitInstance 并在其中調用FreeImage_DeInitialise()釋放FreeImage 庫。這個必須在程序的結尾處唯一地一次調用該函數,以清除FreeImage庫在內存中分配的內存,不然會造成很嚴重的內存泄露。

int CFITestApp::ExitInstance()
{
// TODO: 在此添加專用代碼和/或調用基類
FreeImage_DeInitialise();
return CWinAppEx::ExitInstance();
}



三、讀取圖像
(1)、給CFITestDoc類添加一個public變量
FIBITMAP *m_handleFI;
在類的構造函數添加 :m_handleFI(NULL) 字樣,即


CFITestDoc::CFITestDoc():m_handleFI(NULL)
{
// TODO: 在此添加一次性構造代碼


}



(2)、給CFITestDoc類添加兩個函數,FreeDIB ()和LoadDIB(LPCTSTR lpszPathName, int flag)
函數代碼如下
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)、在析構函數中釋放位圖
CFITestDoc::~CFITestDoc()
{
    FreeDIB();
}

(4)、為CFITestDoc類添加ID_FILE_OPEN的COMMAND事件響應函數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()函數添加代碼
void CFITestView::OnDraw(CDC* pDC)   //記得去掉注釋掉的pDC
{
CFITestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

// TODO: 在此處為本機數據添加繪制代碼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);
}
}
}



五、調試程序
調試程序要注意了,可能在LoadDIB函數中出現錯誤,提示LPCTSTR不能轉換成const char * ,本來在ANSI下兩者是一樣的,設置一下項目屬性。


按Alt+F7快捷鍵,如下圖,設置字符集為【使用多字節字符集】
                     


記得把FreeImaged.dll拷貝到...\FITest\Debug下,FreeImage.dll拷貝到...\FITest\Release目錄下;蚨伎截惖紺:\WINDOWS\system32\下也行。




按Ctrl+F5運行程序。


                                       



點擊 【文件】->【打開】打開一張圖片。。。。。。。


                 

                                         
                                
            

參考資料:源代碼: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 ...

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲中字在线 | 国产精品久久av | 日韩一区二区三区在线视频 | 国产精品黄视频 | 嫩草视频免费 | 国产免费色 | 在线观看日韩 | 日韩国产中文字幕 | 欧美日韩中文国产一区发布 | 成人精品鲁一区一区二区 | 亚洲欧美在线观看视频 | 国产精品高潮呻吟久久久久 | 91久久精| 久久成人一区 | 亚洲久久久 | 一区在线免费视频 | 成人在线电影在线观看 | 久久久久亚洲精品 | 色橹橹欧美在线观看视频高清 | 欧美日韩在线观看一区二区三区 | 精品视频一区二区三区四区 | 在线视频一区二区 | 伊人超碰在线 | 亚洲三区在线 | 7777在线视频免费播放 | 久久精品国产99国产 | 一区在线观看视频 | 韩日视频在线观看 | 草樱av | 国产在线观看 | 免费一区二区 | 中文字幕国产一区 | 国产在线视频在线观看 | 国产日韩精品一区二区三区 | 久久国产精品一区二区三区 | 一区二区日韩精品 | 欧美福利| 综合一区| 亚洲欧洲视频 | 久久久久久久久久久一区二区 | 天堂在线www |