資源簡介
封裝的一個將24BitCount 的bmp 轉換為16bitCount 或8bitcount 或4Bitcount類。并保存。此接口只需要輸入要轉換圖片的路徑就可以獲得轉換后圖片的bitmap。此接口在兼容各種平臺

代碼片段和文件信息
//?BitTransform.cpp:?implementation?of?the?CBitTransform?class.
//
//////////////////////////////////////////////////////////////////////
#include?“stdafx.h“
#include?“BitTrans.h“
#include?“BitTransform.h“
#ifdef?_DEBUG
#undef?THIS_FILE
static?char?THIS_FILE[]=__FILE__;
#define?new?DEBUG_NEW
#endif
#pragma?pack(1)
typedef?struct?_BITMAPFILEHEADER{
WORD????bfType;?
DWORD???bfSize;?
WORD????bfReserved1;?
WORD????bfReserved2;?
DWORD???bfOffBits;?
}_BITMAPFILEHEADER;?
//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBitTransform::CBitTransform()
{
}
CBitTransform::~CBitTransform()
{
}
BOOL?CBitTransform::Bit24ToBit16(HBITMAP?&hBitmapchar?*szOldBmpNamechar?*szNewBmpName)
{
int?nPaletteSize?=0;
bool?bFileRead?=?false;
char?*lpbuff??=?NULL;
BITMAPFILEHEADER*?pBmpFileHeader?=?NULL;
BITMAPINFOHEADER*?pBmpInfoHeader?=?NULL;
FILE*?bitmapFile;??
//CFileException?fileException;??
//if(!bitmapFile.Open(szOldBmpNameCFile::modeRead&fileException))?
bitmapFile?=?fopen(szOldBmpName“r+b“);
if(bitmapFile?==?NULL)
{??
TRACE(“Can‘t?open?file?%s\n“szOldBmpName/*fileException.m_cause*/);
return?false;
}?
int?bitmapfileheaderLen?=?sizeof(BITMAPFILEHEADER);
pBmpFileHeader=(BITMAPFILEHEADER*)?new?char?[bitmapfileheaderLen];//給文件信息頭分配內存??
//bitmapFile.Read(pBmpFileHeaderbitmapfileheaderLen);//讀入文件信息頭信息?
fread(pBmpFileHeaderbitmapfileheaderLen1bitmapFile);
int?bitmapinfoheader?=?sizeof(BITMAPINFOHEADER);
pBmpInfoHeader=(BITMAPINFOHEADER*)?new?char?[bitmapinfoheader];//給BMP信息頭分配內存??
//bitmapFile.Read(pBmpInfoHeaderbitmapinfoheader);?
fread(pBmpInfoHeaderbitmapinfoheader1bitmapFile);
if(pBmpFileHeader->bfType!=0x4D42)//判斷文件是不是位圖文件??
{??
TRACE((“This?is?not?a?bitmap?file!“));??
bFileRead=FALSE;??
//bitmapFile.Close();
fclose(bitmapFile);
delete?[]pBmpFileHeader;
delete?[]pBmpInfoHeader;
return?false;??
}??
if(pBmpInfoHeader->biCompression!=0)//判斷圖像是不是壓縮的??
{??
AfxMessageBox(“This?system?only?support?Un-compression!!“);??
fclose(bitmapFile);
delete?[]pBmpFileHeader;
delete?[]pBmpInfoHeader;
return?false;?
}??
DWORD?dwbmp;
switch(pBmpInfoHeader->biBitCount)//判斷顏色的位數??
{??
case?1:??
nPaletteSize=2;??
break;??
case?4:??
nPaletteSize=16;??
break;??
case?8:??
nPaletteSize=256;??
break;
case?24:??
nPaletteSize=0;//當為真彩色時沒有顏色表,所以為0?
dwbmp?=?(pBmpInfoHeader->biWidth*24+31)/32*4*pBmpInfoHeader->biHeight;
lpbuff?=?new?char[dwbmp];
//bitmapFile.Seek(bitmapfileheaderLen+bitmapinfoheaderSEEK_SET);
//bitmapFile.Read(lpbuffdwbmp);
fread(lpbuffdwbmp1bitmapFile);
Bit24ToBit16Ex(hBitmap16pBmpInfoHeader->biWidthpBmpInfoHeader->biHeight(char*)lpbuffszNewBmpName);
break;??
default:??
TRACE(“This?color?is?not?valid!“);???
}
delete?[]pBm
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????7542??2010-09-12?21:38??BitTransform\BitTransform.cpp
?????文件???????1128??2010-09-12?23:28??BitTransform\BitTransform.h
?????目錄??????????0??2010-09-14?22:03??BitTransform
-----------?---------??----------?-----??----
?????????????????8670????????????????????3
評論
共有 條評論