CxImage功能強(qiáng)大的圖形處理程序_第1頁
CxImage功能強(qiáng)大的圖形處理程序_第2頁
CxImage功能強(qiáng)大的圖形處理程序_第3頁
CxImage功能強(qiáng)大的圖形處理程序_第4頁
CxImage功能強(qiáng)大的圖形處理程序_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論