資源簡介
BMP圖像文件讀寫操作類,C++實(shí)現(xiàn),支持24位位圖。適合學(xué)習(xí)用。

代碼片段和文件信息
//---------------------------------------------------------------------------
#pragma?hdrstop
#include?“BMPHelper.h“
//---------------------------------------------------------------------------
#pragma?package(smart_init)
//---------------------------------------------------------------------------
TBMPHelper::TBMPHelper(void)
{
InitBMPFile();
}
//---------------------------------------------------------------------------
TBMPHelper::~TBMPHelper(void)
{
if(NULL?!=?m_BMPFile->BMPData)
{
delete?[]m_BMPFile->BMPData;
m_BMPFile->BMPData?=?NULL;
}
delete?m_BMPFile;
}
//---------------------------------------------------------------------------
void?TBMPHelper::InitBMPFile(void)
{
????m_BMPFile?=?new?BITMAPFILE;
memset(&(m_BMPFile->FileHeader)?0?sizeof(m_BMPFile->FileHeader));
memset(&(m_BMPFile->InfoHeader)?0?sizeof(m_BMPFile->InfoHeader));
m_BMPFile->BMPData?=?NULL;
m_RealImageWidth????=?0;
m_RealImageHeight???=?0;
m_RealImageDataSize?=?0;
}
//---------------------------------------------------------------------------
int?TBMPHelper::OpenBMPFile(const?wchar_t*?wszFileName)
{
????wchar_t?wszOpenMode[]?=?{‘r‘‘b‘};
FILE?*pFile?=?_wfopen(wszFileName?wszOpenMode);
if(NULL?==?pFile)
????{
return?1;
}
//?加載位圖文件頭
fseek(pFile?0?SEEK_SET);
fread(&(m_BMPFile->FileHeader)?sizeof(m_BMPFile->FileHeader)?1?pFile);
//?不是有效的BMP位圖文件
if(0x4d42?!=?m_BMPFile->FileHeader.bfType)
{
fclose(pFile);
return?2;
????}
//?加載位圖信息頭
fseek(pFile?sizeof(m_BMPFile->FileHeader)?SEEK_SET);
fread(&(m_BMPFile->InfoHeader)?sizeof(m_BMPFile->InfoHeader)?1?pFile);
//?僅支持24位真彩色圖像
if(24?!=?m_BMPFile->InfoHeader.biBitCount)
{
fclose(pFile);
return?3;
}
//?計(jì)算位圖數(shù)據(jù)大小,這里計(jì)算數(shù)據(jù)需要檢測高度值的正負(fù)性
m_RealImageWidth???=?m_BMPFile->InfoHeader.biWidth;
m_RealImageHeight??=?m_BMPFile->InfoHeader.biHeight?>?0???m_BMPFile->InfoHeader.biHeight?:?-(m_BMPFile->InfoHeader.biHeight);
WORD?BitsPerPixel?=?m_BMPFile->InfoHeader.biBitCount;
DWORD?LineByteCnt?=?(m_RealImageWidth*BitsPerPixel)/8;
m_RealImageDataSize?=?LineByteCnt*m_RealImageHeight;
m_BMPFile->BMPData?=?new?BYTE[m_RealImageDataSize];
fseek(pFile?m_BMPFile->FileHeader.bfOffBits?SEEK_SET);
//?不需要四字節(jié)對齊處理
if(0?==?LineByteCnt%4)
{
//?加載位圖數(shù)據(jù)
fread(m_BMPFile->BMPData?m_RealImageDataSize?1?pFile);
}
else
{
BYTE?*WTDataBuf?=?m_BMPFile->BMPData;
LONG?WTSize?=?3*m_RealImageWidth;
int?FillOffset?=?4?-?LineByteCnt%4;
for(int?iY=0;?iY {
//?加載位圖數(shù)據(jù)
fread(WTDataBuf?WTSize?1?pFile);
WTDataBuf?+=?WTSize;
fseek(pFile?FillOffset?SEEK_CUR);
}
}
fclose(pFile);
return?0;
}
//---------------------------------------------------------------------------
int?TBMPHelper::SaveToBMPFile(const?wchar_t*?wszFileName)
{
if(NULL?==?m_BMPFile->BMPData)
{
return?1;
}
wchar_t?wszOpenMode[]?=?{‘w‘‘b‘};
FILE?*pFile?=?_wfope
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????5195??2017-10-21?09:52??BMPHelper\BMPHelper.cpp
?????文件???????3188??2017-11-04?22:57??BMPHelper\BMPHelper.h
?????目錄??????????0??2017-10-21?10:00??BMPHelper
-----------?---------??----------?-----??----
?????????????????8383????????????????????3
評論
共有 條評論