青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

asm, c, c++ are my all
-- Core In Computer
posts - 139,  comments - 123,  trackbacks - 0

在向大家介紹CxImage類庫之前,先向大家推薦一個優秀的站點: http://www.codeproject.com 。這個站點有很多值得收藏的文章和源碼。本文就是根據此站點相關信息寫成。

關于這個類,可以看CodeProject上的文章:http://www.codeproject.com/bitmap/CXImage.asp

CxImage是一個可以用于MFC的C++類,可以打開,保存,顯示,轉換各種格式的圖像文件,比如BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K 等格式的文件。可以實現BMP<->JPG,PNG?<>TIFF格式等等的轉換。

它的作者是: Davide Pizzolato ,主頁: http://www.xdp.it/

CxImage類庫是一個優秀的圖像操作類庫。它可以快捷地存取、顯示、轉換各種圖像。有的讀者可能說,有那么多優秀的圖形庫,如OpenIL,FreeImage,PaintLib等等,它們可謂是功能強大,齊全,沒必要用其它的類庫。但我要說,這些類庫基本上沒有免費的,使用這些類庫,你要被這樣那樣的許可協議所束縛。在這點上,CxImage類庫是完全免費的。另外,在使用上述類庫時,你會遇到重重麻煩。因為它們大部分是平臺無關的,且用C語言寫成,有的還夾雜著基本的C++ wrapper和成堆德編譯選項的聲明需要你去處理。而CxImage類庫在這方面做得很好。還有讓我最看好的,就是作者完全公開了 源代碼 。相對于那些封裝好的圖形庫和GDI+來說,這一點使我們可以進一步學習各種編解碼技術,而不再浮于各種技術的表面。 CxImage類庫的結構:

一個CxImage對象是一個擴展了的位圖。作者只是在位圖結構上添加了一些起存儲信息作用的成員變量。一個CxImage對象(同時)也是一組層。每個層只有在需要時才會分配相應的緩沖區。CxImage::pDib代表著背景圖像,CxImage::pAlpha代表著透明層,CxImage::pSelection代表著被選中的層,被用來創建圖像處理時讓用戶感興趣的區域。在這三個特殊層面的基礎上,你可以增加一些額外的層,這些層可以存儲在CxImage::pLayers中。一般說來,層是一個完整的CxImage對象。因此,你可以構造很復雜的嵌套層。下面是CxImage的一些成員變量:

class ?CxImage
??
{
??
??
protected
:
??
void * ?pDib;???????????? // 包含文件頭,調色板等等

??BITMAPINFOHEADER?head;? // 標準的文件頭(位圖)
??CXIMAGEINFO?info;?????? // 擴展了的信息
??BYTE * ?pSelection;?????? // 用戶選中的區域
??BYTE * ?pAlpha;?????????? // alpha通道
??CxImage ** ?pLayers;????? // 通用層
??}

typedef?
struct ?tagCxImageInfo? {
????DWORD???dwEffWidth;???????
// DWORD?掃描線寬

????BYTE * ???pImage;??????????? // 圖像位數
???? void * ???pGhost;??????????? // if?this?is?a?ghost,?pGhost?point?to?the?body
????DWORD???dwType;??????????? // 原圖像的格式
???? char ????szLastError[ 256 ];? // 出錯信息
???? long ????nProgress;???????? // 監視循環的次數
???? long ????nEscape;?????????? // 跳出標志
???? long ????nBkgndIndex;?????? // GIF,?PNG,?MNG格式使用
????RGBQUAD?nBkgndColor;?????? // RGB三原色透明度
????BYTE????nQuality;????????? // JPEG格式使用
???? long ????nFrame;??????????? // TIF,?GIF,?MNG使用?:實際的幀數
???? long ????nNumFrames;??????? // TIF,?GIF,?MNG使用?:幀總數
????DWORD???dwFrameDelay;????? // GIF,?MNG使用
???? long ????xDPI;????????????? // 水平分辨率
???? long ????yDPI;????????????? // 垂直分辨率
????RECT????rSelectionBox;???? // 選中的矩形區
????BYTE????nAlphaMax;???????? // 陰影的最大不透明度
???? bool ????bAlphaPaletteEnabled;?? // 如果調色板中有Alpha通道則為真
???? bool ????bEnabled;????????? // 打開繪圖函數
???? long ????xOffset;
????
long
????yOffset;
DWORD???dwEncodeOption;???
// 一些編碼選項

RGBQUAD?last_c;??????????? // 一些優化選項
????BYTE????last_c_index;
????
bool
????last_c_isvalid;
????
long
????nNumLayers;
????DWORD???dwFlags;
}
?CXIMAGEINFO;

?

要在picture box中顯示一個png格式的文件,只需:
CxImage image("myfile.png", CXIMAGE_FORMAT_PNG);
HBITMAP m_bitmap = image.MakeBitmap(m_picture.GetDC()->m_hDC);
m_picture.SetBitmap(m_bitmap);
其它格式則類推。

Examples: how to ...
... convert from a format to another

CxImage??image;
// ?bmp?->?jpg

image.Load( " image.bmp " ,?CXIMAGE_FORMAT_BMP);
if ?(image.IsValid())
{
????
if ( ! image.IsGrayScale())?image.IncreaseBpp( 24
);
????image.SetJpegQuality(
99
);
????image.Save(
" image.jpg "
,CXIMAGE_FORMAT_JPG);
}

// ?png?->?tif
image.Load( " image.png " ,?CXIMAGE_FORMAT_PNG);
if ?(image.IsValid())
{
????image.Save(
" image.tif "
,CXIMAGE_FORMAT_TIF);
}


?load?an?image?resource
// Load?the?resource?IDR_PNG1?from?the?PNG?resource?type
CxImage * ?newImage? = ? new ?CxImage();
newImage
->
LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_PNG1),
???????????????????????
" PNG "
),CXIMAGE_FORMAT_PNG);
or
// Load?the?resource?IDR_JPG1?from?DLL

CxImage * ?newImage? = ? new ?CxImage();
HINSTANCE?hdll
= LoadLibrary( " imagelib.dll "
);
if ?(hdll)
{
????HRSRC?hres
= FindResource(hdll,MAKEINTRESOURCE(IDR_JPG1), " JPG "
);
????newImage
->
LoadResource(hres,CXIMAGE_FORMAT_JPG,hdll);
????FreeLibrary(hdll);
}

or
// Load?a?bitmap?resource;
HBITMAP?bitmap? = ?::LoadBitmap(AfxGetInstanceHandle(),
??????????????????????????????MAKEINTRESOURCE(IDB_BITMAP1)));
CxImage?
* newImage? = ? new
?CxImage();
newImage
->
CreateFromHBITMAP(bitmap);
?decode?an?image?from?memory
CxImage?image((BYTE
*
)buffer,size,image_type);
orCxMemFile?memfile((BYTE
*
)buffer,size);
CxImage?image(
&
memfile,image_type);
orCxMemFile?memfile((BYTE
*
)buffer,size);
CxImage
* ?image? = ? new
?CxImage();
image
-> Decode( &
memfile,type);
?encode?an?image?
in
?memory
long ?size = 0
;
BYTE
* ?buffer = 0
;
image.Encode(buffer,size,image_type);

free(buffer);
orCxMemFile?memfile;
memfile.Open();
image.Encode(
&
memfile,image_type);
BYTE
* ?buffer? =
?memfile.GetBuffer();
long ?size? =
?memfile.Size();

free(buffer);
?create?a?multipage?TIFF
CxImage?
* pimage[ 3
];
pimage[
0 ] =&
image1;
pimage[
1 ] =&
image2;
pimage[
2 ] =&
image3;

FILE
*
?hFile;
hFile?
= ?fopen( " multipage.tif " , " w+b "
);

CxImageTIF?multiimage;
multiimage.Encode(hFile,pimage,
3
);

fclose(hFile);
orFILE
*
?hFile;
hFile?
= ?fopen( " c:\\multi.tif " , " w+b "
);

CxImageTIF?image;
image.Load(
" c:\\1.tif "
,CXIMAGE_FORMAT_TIF);
image.Encode(hFile,
true
);
image.Load(
" c:\\2.bmp "
,CXIMAGE_FORMAT_BMP);
image.Encode(hFile,
true
);
image.Load(
" c:\\3.png "
,CXIMAGE_FORMAT_PNG);
image.Encode(hFile);

fclose(hFile);

?copy
/
paste?an?image
// copy

HANDLE?hDIB? = ?image -> CopyToHandle();
if ?(::OpenClipboard(AfxGetApp() -> m_pMainWnd -> GetSafeHwnd()))?
{
????
if (::EmptyClipboard())?
{
????????
if ?(::SetClipboardData(CF_DIB,hDIB)? == ?NULL?)?
{
????????????AfxMessageBox(?
" Unable?to?set?Clipboard?data "
?);
}
????}
????}

CloseClipboard();

// paste
HANDLE?hBitmap = NULL;
CxImage?
* newima? = ? new
?CxImage();
if ?(OpenClipboard())?hBitmap =
GetClipboardData(CF_DIB);
if ?(hBitmap)?newima ->
CreateFromHANDLE(hBitmap);
CloseClipboard();

?

需要大家注意的是:整個CxImage類庫非常大。如果你只需要能處理其中的幾種格式,你可以在主要的頭文件ximage.h中找到一些開關選項來關閉一些圖像庫。JPG、PNG、TIFF中的每一個庫,都會向最終程序增加約100KB的內容。而CxImage類庫壓縮后只有約60KB。所以,你需要謹慎挑選一些你真正需要的類庫。作者提供的示例工程在編譯后,你會發現如下一些文件: ·CxImage : cximage.lib - static library ·CxImageCrtDll : cximagecrt.dll - DLL not using mfc ·CxImageMfcDll : cximage.dll - DLL using mfc ·Demo : demo.exe - program linked with cximage.lib and the C libraries ·DemoDll : demodll.exe - program linked with cximagecrt.dll ·j2k,jasper,jbig,jpeg,png,tiff,zlib : static C libraries 構建這些工程需要耗費幾分鐘的時間(中間文件可達60MB)。下面則是使用CxImage類庫前必須設置的一些參數:

Project Settings
?|- C/C++
?|?? |- Code Generation
?|?? |?? |- Use run-time library : Multithreaded DLL (must be the same for
?|?? |?? |? all the linked libraries)
?|?? |?? |- Struct member alignment : must be the same for all the linked
?|?? |?? |? libraries
?|?? |- Precompiled headers : not using precompiled headers
?|?? |- Preprocessor
?|?????? |- Additional Include Directories:? ..\cximage
?|- Link
??? |- General
??????? |- Object/library modules: ../png/Debug/png.lib
?????????????????????????????????? ../jpeg/Debug/jpeg.lib
?????????????????????????????????? ../zlib/Debug/zlib.lib
?????????????????????????????????? ../tiff/Debug/tiff.lib
??????????????????????????????????? ../cximage/Debug/cximage.lib? ...

兼容性: - Microsoft Visual C++ 6.0 (static library, DLL and OCX builds) - Microsoft Visual C++ .NET 2003 - Borland C++ Builder version 3 and version 6 - Kdevelop 2.1 with gcc 2.96 (Linux) 關于CxImage類庫作者: Davide Pizzolato,一位電子工程師。1984年開始編程,已不在乎使用何種編程語言來開發軟件。現就職于Askoll的電子研發部。

posted on 2006-09-10 21:07 Jerry Cat 閱讀(1297) 評論(0)  編輯 收藏 引用

<2006年4月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(7)

隨筆檔案

最新隨筆

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国内精品模特av私拍在线观看| 亚洲曰本av电影| 亚洲少妇自拍| 这里只有精品电影| 亚洲免费视频在线观看| 午夜电影亚洲| 久久婷婷av| 亚洲福利视频专区| 亚洲欧洲中文日韩久久av乱码| 亚洲人成绝费网站色www| 亚洲最新视频在线| 欧美一区日韩一区| 欧美成人午夜视频| 国产精品日本| 亚洲国产精品久久久久久女王 | 国内自拍一区| 在线欧美影院| 亚洲免费一级电影| 一区二区三区偷拍| 欧美sm视频| 欧美日韩亚洲一区二区三区在线观看| 欧美精品在线一区二区三区| 欧美三级视频在线| 国产亚洲一区二区精品| 91久久精品日日躁夜夜躁国产| 亚洲网站在线| 免费不卡视频| 在线视频欧美一区| 久久网站免费| 国产乱码精品1区2区3区| 亚洲国产精品一区| 亚洲一级免费视频| 亚洲国产精品999| 午夜精品视频在线观看一区二区| 欧美91大片| 国产日韩亚洲欧美综合| 99国产精品久久久久久久| 久久丁香综合五月国产三级网站| 亚洲国产导航| 久久免费国产| 国产日韩欧美黄色| 在线视频精品一区| 欧美 日韩 国产 一区| 中文在线不卡视频| 欧美高清在线播放| 国产专区综合网| 亚洲一本大道在线| 亚洲国产日韩一区| 狼狼综合久久久久综合网| 国产精品视频在线观看| 一本色道久久加勒比88综合| 免费在线观看精品| 久久福利毛片| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 日韩午夜电影av| 毛片基地黄久久久久久天堂| 亚洲免费视频在线观看| 欧美日韩成人精品| 一本色道久久加勒比88综合| 亚洲电影免费观看高清完整版在线| 久久er精品视频| 国内激情久久| 免费在线看成人av| 久久久精品日韩欧美| 国产性色一区二区| 久久精品二区亚洲w码| 亚洲欧美一级二级三级| 国产日韩av高清| 久久亚洲春色中文字幕久久久| 午夜免费久久久久| 国产综合网站| 欧美大胆人体视频| 欧美高清在线视频观看不卡| 亚洲人成在线影院| 亚洲精品在线三区| 国产精品美女久久久| 欧美一区二区视频在线观看| 午夜国产精品影院在线观看| 国产一区二区三区久久悠悠色av| 久久久91精品| 欧美不卡在线视频| 一区二区av在线| 亚洲免费久久| 国产精品你懂的在线| 久久精品国产v日韩v亚洲| 欧美主播一区二区三区美女 久久精品人| 国产欧美综合在线| 欧美韩日一区二区| 欧美日韩一区二区三区在线视频| 亚洲一区在线免费观看| 亚洲午夜免费视频| 在线不卡欧美| 亚洲少妇最新在线视频| 国产在线视频欧美| 亚洲美女少妇无套啪啪呻吟| 国产精品女人久久久久久| 久久青青草原一区二区| 欧美电影资源| 欧美一区二区三区另类| 久久久久久电影| 亚洲一区二区欧美日韩| 久久福利一区| 亚洲欧洲99久久| 欧美不卡在线视频| 久久久久久久波多野高潮日日| 欧美黑人多人双交| 久久久99国产精品免费| 欧美理论电影在线播放| 久久精品免费| 国产精品卡一卡二| 亚洲精品国产精品国自产在线| 亚洲综合999| 99国产精品久久久| 美女成人午夜| 久久成人在线| 国产精品日产欧美久久久久| 欧美高清视频一区二区三区在线观看 | 亚洲日本理论电影| 狠狠干成人综合网| 亚洲午夜日本在线观看| 亚洲免费观看在线视频| 久久精品成人欧美大片古装| 亚洲一区二区三区国产| 免费观看久久久4p| 老司机午夜精品视频| 国产欧美日本| 亚洲午夜在线视频| 一区二区三区成人精品| 欧美国产一区在线| 欧美高清hd18日本| 亚洲国产91| 久久永久免费| 美国十次成人| 永久91嫩草亚洲精品人人| 午夜精品视频| 久久久久久亚洲精品中文字幕| 国产精品狼人久久影院观看方式| 99re6热在线精品视频播放速度 | 国产精品久久一区二区三区| 9色精品在线| 亚洲免费网址| 国产九九精品视频| 午夜视频一区在线观看| 欧美一激情一区二区三区| 国产精品网站在线观看| 亚洲午夜在线观看视频在线| 亚洲欧美中文日韩在线| 国产精品资源在线观看| 午夜精品久久99蜜桃的功能介绍| 午夜精品一区二区三区在线视| 国产精品乱码妇女bbbb| 香蕉av福利精品导航| 久久视频一区| 亚洲高清久久| 欧美日韩成人网| 亚洲影视在线| 久久久精品一区| 亚洲日韩视频| 欧美性大战久久久久| 午夜精品av| 欧美黄色成人网| 亚洲午夜在线观看视频在线| 国产精品午夜av在线| 久久精品女人的天堂av| 亚洲国产视频直播| 午夜精彩视频在线观看不卡| 国产一区二区在线观看免费| 欧美制服丝袜第一页| 欧美激情在线狂野欧美精品| 一区二区三区高清| 国产日韩欧美综合精品| 免费成人av在线看| 亚洲一级特黄| 蜜桃av一区二区三区| 夜夜嗨av一区二区三区网站四季av| 欧美性大战久久久久| 久久午夜影视| 亚洲午夜在线视频| 欧美激情第五页| 午夜在线精品偷拍| 亚洲国产99精品国自产| 国产精品国产精品| 久久人人九九| 久久激情一区| 曰本成人黄色| 国产欧美一区二区精品忘忧草| 免费不卡视频| 欧美在线一级视频| 亚洲视频中文| 亚洲精品日产精品乱码不卡| 久久久噜噜噜久噜久久 | 老司机免费视频久久| 亚洲午夜av| 亚洲国产精品免费| 国产在线精品成人一区二区三区| 欧美日韩成人综合天天影院| 久久精品亚洲一区| 亚洲已满18点击进入久久 | 久久综合伊人| 西西人体一区二区|