版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
CxImage功能強(qiáng)大的圖形處理程序CxImage是免費(fèi)開源的使用簡(jiǎn)單的圖形處理程序,在這里演示了兩個(gè)功能。1在對(duì)話框上加一按鈕,其函數(shù)為將BMP位圖轉(zhuǎn)換成TIF和JPEG。2在對(duì)話框上加一按鈕,抓屏為BMP位圖,通過剪切板保存為JPG文件。
一CxImage簡(jiǎn)單使用說明
大部分內(nèi)容來自網(wǎng)上,做了適當(dāng)?shù)馗倪M(jìn)。CxImage是免費(fèi)開源的C++圖形軟件,支持BMP、GIF、ICO、TGA、JPEG、PCX、PNG、TIFF、MNG、RAS等文件格式,能夠?qū)崿F(xiàn)圖像的導(dǎo)入、保存、顯示,以及幾何變換、格式轉(zhuǎn)換,也可實(shí)現(xiàn)內(nèi)存圖像數(shù)據(jù)的類型轉(zhuǎn)換。CxImage的主要函數(shù)有:Constructors
構(gòu)造函數(shù),Initialization
初始化,F(xiàn)ile文件編解碼,Generic圖像基本變化,DSP圖像處理操作,Painting繪圖操作,MultipleImages多幀圖像操作,Transparency透明層操作,Palette調(diào)色板操作,Pixels像素操作,RegionSelection區(qū)域選擇操作,AlphaChannelAlpha通道操作,Layers圖像層操作,Attributes圖像屬性操作,Miscellaneous雜項(xiàng)等。CxImage使用
1.下載CxImage的源代碼
可以到作者DavidePizzolato主頁:
http://www.xdp.it/,或者/bitmap/CXImage.asp,/KB/graphics/cximage.aspx下載CxImage的源代碼和完整Demo??赡苄枰茸?cè)一個(gè)codeproject的免費(fèi)賬號(hào)。
2.編譯CxImage。
解壓源碼包,在解壓后的目錄下有一個(gè)CxImageLib.dsw工作空間文件,使用VC++6.0打開該工作空間文件:
①Project->Settings->C/C++,在Category下拉列表中選擇CodeGeneration,將Userum-timelibary中選擇MultiThreadDLL.在Category下拉列表中選擇PrecompiledHeaders中,選擇第一項(xiàng):NotusingPrecompiledheaders.
②Build->BatchBuild->勾選你要編譯的版本庫。默認(rèn)情況下是每個(gè)庫都有四個(gè)版本,分別是Debug、Release、UnicodeDebug、UnicodeRelease.選擇你想要的版本,比如只勾選Debug即可。
③執(zhí)行全部編譯,等待幾分鐘,生成幾個(gè)lib。
3.建立自己的測(cè)試工程
①打開VC++6.0,新建基于對(duì)話框的程序TestImg。3.1在對(duì)話框上加一按鈕,其函數(shù)為將BMP位圖轉(zhuǎn)換成TIF和JPEG。
voidCTestImgDlg::OnButton1()
{
CxImageimage;
if(!image.Load("image.bmp",CXIMAGE_FORMAT_BMP))return;
if(image.IsValid())
{
image.Save("image.tif",CXIMAGE_FORMAT_TIF);
if(!image.IsGrayScale())image.IncreaseBpp(24);//顏色數(shù)
image.SetJpegQuality(80);//圖像的質(zhì)量
image.Save("image.jpg",CXIMAGE_FORMAT_JPG);
}
}3.2在對(duì)話框上加一按鈕,點(diǎn)擊抓屏BMP位圖,通過剪切板保存為JPG文件。voidCTestImgDlg::OnButton2()
{
CDC*pDC=GetDC();
CDCmemDC;
memDC.CreateCompatibleDC(pDC);
//pDC兼容DC
CRectrect;
GetClientRect(&rect);
//客戶區(qū)大小
CBitmapm_bmpCatch;
m_bmpCatch.CreateCompatibleBitmap(pDC,rect.Width(),
rect.Height());
//pDC兼容bmp
memDC.SelectObject(&m_bmpCatch);
//選bmp
memDC.BitBlt(0,0,rect.Width(),rect.Height(),pDC,rect.left,rect.top,SRCCOPY);//pDC-->m_bmpCatch
/
longsize=0;
BYTE*buf=NULL;
image.Encode(buf,size,CXIMAGE_FORMAT_JPG);
image.SetJpegQuality(100);
image.Save("scr.jpg",CXIMAGE_FORMAT_JPG);
free(buf);
ReleaseDC(pDC);
memDC.DeleteDC();
}②在TestImgDlg.cpp文件頂部,加入以下代碼:#include"img_h/ximage.h"http://#pragmacomment(lib,"lib/cximagecrtd.lib")//靜態(tài)鏈接庫時(shí)使用,還要對(duì)應(yīng)的cximagecrtd.dll
#pragmacomment(lib,"img_lib/cximage.lib")
#pragmacomment(lib,"img_lib/Jpeg.lib")
#pragmacomment(lib,"img_lib/png.lib")
#pragmacomment(lib,"img_lib/zlib.lib")
if(!image.IsGrayScale())image.IncreaseBpp(24);
//paramnbit:4,8,24
image.SetJpegQuality(99);
//設(shè)置圖像的壓縮質(zhì)量參數(shù)(從0到100,數(shù)值越大,質(zhì)量越高)
image.Save("image.jpg",CXIMAGE_FORMAT_JPG);
//把壓縮后的圖像以jpg文件類型保存起來。
}//從png文件轉(zhuǎn)換為tif文件(png->tif)
image.Load("image.png",CXIMAGE_FORMAT_PNG);
if(image.IsValid())...{
image.Save("image.tif",CXIMAGE_FORMAT_TIF);
}2。加載程序資源圖像(loadanimageresource)即從程序的資源圖像中構(gòu)建CxImage對(duì)象,有如下幾種方式://LoadtheresourceIDR_PNG1fromthePNGresourcetype
CxImage*newImage=newCxImage();
newImage->LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_PNG1),
"PNG"),CXIMAGE_FORMAT_PNG);
或者//LoadtheresourceIDR_JPG1fromDLL
CxImage*newImage=newCxImage();
HINSTANCEhdll=LoadLibrary("imagelib.dll");
if(hdll)...{
HRSRChres=FindResource(hdll,MAKEINTRESOURCE(IDR_JPG1),"JPG");
newImage->LoadResource(hres,CXIMAGE_FORMAT_JPG,hdll);
FreeLibrary(hdll);
}
或者//Loadabitmapresource;
HBITMAPbitmap=::LoadBitmap(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDB_BITMAP1)));
CxImage*newImage=newCxImage();
newImage->CreateFromHBITMAP(bitmap);
3。在內(nèi)存緩沖中的圖像類型轉(zhuǎn)換(1)把內(nèi)存緩沖中的數(shù)據(jù)解碼成一個(gè)Image對(duì)象(decodeanimagefrommemory)有如下幾種方式:
------CxImageimage((BYTE*)buffer,size,image_type);//把內(nèi)存緩沖buffer中的數(shù)據(jù)構(gòu)造成Image對(duì)象//或:CxMemFilememfile((BYTE*)buffer,size);//顯式使用CxMemFile對(duì)象
CxImageimage(&memfile,image_type);//或:CxMemFilememfile((BYTE*)buffer,size);
CxImage*image=newCxImage();
image->Decode(&memfile,type);
(2)把Image編碼存放到內(nèi)存緩沖中(encodeanimageinmemory)--------longsize=0;//得到圖像大小
BYTE*buffer=0;//存儲(chǔ)圖像數(shù)據(jù)的緩沖
image.Encode(buffer,size,image_type);//把image對(duì)象中的圖像以type類型數(shù)據(jù)copy到buffer
...
free(buffer);或:CxMemFilememfile;
//顯式使用CxMemFile對(duì)象
memfile.Open();
image.Encode(&memfile,image_type);
BYTE*buffer=memfile.GetBuffer();
longsize=memfile.Size();
...
free(buffer);---------------4。處理系統(tǒng)粘貼板中的圖像(copy/pasteanimage)//copy(到粘貼板)
HANDLEhDIB=image->CopyToHandle();
if(::OpenClipboard(AfxGetApp()->m_pMainWnd->GetSafeHwnd()))...{
if(::EmptyClipboard())...{
if(::SetClipboardData(CF_DIB,hDIB)==NULL)...{
AfxMessageBox("UnabletosetClipboarddata");
}
}
}
CloseClipboard();//paste(從粘貼板粘貼出來)
HANDLEhBitmap=NULL;
CxImage*newima=newCxImage();
if(OpenClipboard())hBitmap=GetClipboardData(CF_DIB);
if(hBitmap)newima->CreateFromHANDLE(hBitmap);
CloseClipboard();5。在picturebox中顯示一個(gè)png格式的文件HBITMAPm_bitmap=NULL;
CxImageimage("myfile.png",CXIMAGE_FORMAT_PNG);
...
m_bitmap=image.MakeBitmap(m_picture.GetDC()->m_hDC);
m_picture.SetBitmap(m_bitmap);
...
if(m_bitmap)DeleteObject(m_bitmap);四。其它一個(gè)CxImage對(duì)象是一個(gè)擴(kuò)展了的位圖。作者只是在位圖結(jié)構(gòu)上添加了一些起存儲(chǔ)信息作用的成員變量。一個(gè)CxImage對(duì)象(同時(shí))也是一組層。每個(gè)層只有在需要時(shí)才會(huì)分配相應(yīng)的緩沖區(qū)。CxImage::pDib代表著背景圖像,CxImage::pAlpha代表著透明層,CxImage::pSelection代表著被選中的層,被用來創(chuàng)建圖像處理時(shí)讓用戶感興趣的區(qū)域。在這三個(gè)特殊層面的基礎(chǔ)上,你可以增加一些額外的層,這些層可以存儲(chǔ)在CxImage::pLayers中。一般說來,層是一個(gè)完整的CxImage對(duì)象。因此,你可以構(gòu)造很復(fù)雜的嵌套層。下面是CxImage的一些成員變量:classCxImage
{
...
protected:
void*pDib;
//包含文件頭,調(diào)色板等等
BITMAPINFOHEADERhead;//標(biāo)準(zhǔn)的文件頭(位圖)
CXIMAGEINFOinfo;
//擴(kuò)展了的信息
BYTE*pSelection;
//用戶選中的區(qū)域
BYTE*pAlpha;
//alpha通道
CxImage**pLayers;
//通用層
};
typedefstructtagCxImageInfo
{
DWORD
dwEffWidth;
//DWORD掃描線寬
BYTE*
pImage;
//圖像位數(shù)
void*
pGhost;
//ifthisisaghost,pGhostpointtothebody
DWORD
dwType;
//原圖像的格式
char
szLastError[256];//出錯(cuò)信息
long
nProgress;
//監(jiān)視循環(huán)的次數(shù)
long
nEscape;
//跳出標(biāo)志
long
nBkgndIndex;
//GIF,PNG,MNG格式使用
RGBQUADnBkgndColor;
//RGB三原色透明度
BYTE
nQuality;
//JPEG格式使用
long
nFrame;
//TIF,GIF,MNG使用:實(shí)際的幀數(shù)
long
nNu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年種植技術(shù)員資格真題及答案
- 沉井施工方法
- 2025重癥醫(yī)學(xué)習(xí)題及答案
- 2025年工業(yè)機(jī)器人技術(shù)專業(yè)《工業(yè)機(jī)器人系統(tǒng)集成》專項(xiàng)訓(xùn)練試題及答案
- 2025年人工智能的發(fā)展與應(yīng)用知識(shí)試卷及答案
- 2025年人工智能應(yīng)用(自然語言處理)綜合測(cè)試試卷及答案
- 三級(jí)安全教育培訓(xùn)試題含答案(班組級(jí))
- 2025年三級(jí)樂理考試題及答案
- 建設(shè)工程施工合同糾紛要素式起訴狀模板多場(chǎng)景適用
- 銷售技巧2026年客戶轉(zhuǎn)化
- 2026年吉林司法警官職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能考試備考試題帶答案解析
- 2025內(nèi)蒙古潤(rùn)蒙能源有限公司招聘22人考試題庫附答案解析(奪冠)
- 2026年國家電網(wǎng)招聘之電網(wǎng)計(jì)算機(jī)考試題庫500道有答案
- 年味課件教學(xué)課件
- 中國臨床腫瘤學(xué)會(huì)(csco)胃癌診療指南2025
- 廣東省廣州市2025年上學(xué)期八年級(jí)數(shù)學(xué)期末考試試卷附答案
- 疑難病例討論制度落實(shí)常見問題與改進(jìn)建議
- 手機(jī)鋪貨協(xié)議書
- 2025年新能源停車場(chǎng)建設(shè)項(xiàng)目可行性研究報(bào)告
- 2025年物業(yè)管理中心工作總結(jié)及2026年工作計(jì)劃
- 創(chuàng)傷性脾破裂的護(hù)理
評(píng)論
0/150
提交評(píng)論