資源簡介
基于MFC實現BMP的顯示24色變灰
代碼片段和文件信息
//======================================================================
//?文件:?Dib.cpp
//?內容:?設備無關位圖類-源文件
//?功能:?(1)位圖的加載與保存;
//????????(2)位圖信息的獲取;
//????????(3)位圖數據的獲取;
//????????(3)位圖的顯示;
//????????(4)位圖的轉換;
//????????(5)位圖相關判斷;
//======================================================================
#include?“StdAfx.h“
#include?“Dib.h“
//=======================================================
//?函數功能:?構造函數,初始化數據成員
//?輸入參數:?無
//?返回值:???無
//=======================================================
CDib::CDib(void)
{
//?數據成員初始化
strcpy(m_fileName?““);
m_lpBmpFileHeader?=?NULL;
m_lpDib?=?NULL;???
m_lpBmpInfo?=?NULL;
m_lpBmpInfoHeader?=?NULL;
m_lpRgbQuad?=?NULL;
m_lpData?=?NULL;
m_hPalette?=?NULL;
m_bHasRgbQuad?=?FALSE;
m_bValid?=?FALSE;
}
//=======================================================
//?函數功能:?析構函數,釋放內存空間
//?輸入參數:?無
//?返回值:???無
//=======================================================
CDib::~CDib(void)
{
//?清理空間
Empty();
}
//=======================================================
//?函數功能:?從文件加載位圖
//?輸入參數:?LPCTSTR?lpszPath-待加載位圖文件路徑
//?返回值:???BOOL-TRUE?成功;FALSE?失敗
//=======================================================
BOOL?CDib::LoadFromFile(LPCTSTR?lpszPath)
{
//?記錄位圖文件名
strcpy(m_fileName?lpszPath);
//?以讀模式打開位圖文件
CFile?dibFile;
if(!dibFile.Open(m_fileName?CFile::modeRead?|?CFile::shareDenyWrite))
{
return?FALSE;
}
//?清理空間
Empty(FALSE);?
//?為位圖文件頭分配空間,并初始化為0
m_lpBmpFileHeader?=?(LPBITMAPFILEHEADER)new?BYTE[sizeof(BITMAPFILEHEADER)];
memset(m_lpBmpFileHeader?0?sizeof(BITMAPFILEHEADER));?
//?讀取位圖文件頭
int?nCount?=?dibFile.Read((void?*)m_lpBmpFileHeader?sizeof(BITMAPFILEHEADER));
if(nCount?!=?sizeof(BITMAPFILEHEADER))?
{
return?FALSE;
}?
//?判斷此文件是不是位圖文件(“0x4d42”代表“BM”)
if(m_lpBmpFileHeader->bfType?==?0x4d42)
{
//?是位圖文件
//?計算除位圖文件頭的空間大小,分配空間并初始化為0
DWORD?dwDibSize?=?dibFile.GetLength()?-?sizeof(BITMAPFILEHEADER);
m_lpDib?=?new?BYTE[dwDibSize];
memset(m_lpDib?0?dwDibSize);
//?讀取除位圖文件頭的所有數據
dibFile.Read(m_lpDib?dwDibSize);
//?關閉位圖文件
dibFile.Close();
//?設置位圖信息指針
m_lpBmpInfo?=?(LPBITMAPINFO)m_lpDib;
//?設置位圖信息頭指針
m_lpBmpInfoHeader?=?(LPBITMAPINFOHEADER)m_lpDib;
//?設置位圖顏色表指針
m_lpRgbQuad?=?(LPRGBQUAD)(m_lpDib?+?m_lpBmpInfoHeader->biSize);
//?如果位圖沒有設置位圖使用的顏色數,設置它
if(m_lpBmpInfoHeader->biClrUsed?==?0)
{
m_lpBmpInfoHeader->biClrUsed?=?GetNumOfColor();
}
//?計算顏色表長度
DWORD?dwRgbQuadLength?=?CalcRgbQuadLength();
//?設置位圖數據指針
m_lpData?=?m_lpDib?+?m_lpBmpInfoHeader->biSize?+?dwRgbQuadLength;
//?判斷是否有顏色表
if(m_lpRgbQuad?==?(LPRGBQUAD)m_lpData)
{
m_lpRgbQuad?=?NULL;????//?將位圖顏色表指針置空
m_bHasRgbQuad?=?FALSE;?//?無顏色表
}
else
{
m_bHasRgbQuad?=?TRUE;??//?有顏色表
MakePalette();?????????//?根據顏色表生成調色板
}????????
//?設置位圖大小(因為很多位圖文件都不設置此項)
m_lpBmpInfoHeader->biSizeImage?=?GetSize();
//?位圖有效
m_bValid?=?TRU
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2015-07-03?16:19??MniBMP\
?????目錄???????????0??2015-07-03?16:03??MniBMP\Debug\
?????文件??????151552??2015-07-03?16:19??MniBMP\Debug\MniBMP.exe
?????文件?????1405600??2015-07-03?16:19??MniBMP\Debug\MniBMP.ilk
?????文件?????3435520??2015-07-03?16:19??MniBMP\Debug\MniBMP.pdb
?????目錄???????????0??2015-07-03?16:21??MniBMP\MniBMP\
?????文件????18582528??2015-07-03?16:22??MniBMP\MniBMP.ncb
?????文件?????????884??2015-07-03?15:32??MniBMP\MniBMP.sln
?????文件???????16896??2015-07-03?16:22??MniBMP\MniBMP.suo
?????文件?????2305078??2015-07-03?16:22??MniBMP\MniBMP\2.BMP
?????目錄???????????0??2015-07-03?16:19??MniBMP\MniBMP\Debug\
?????文件????????5976??2015-07-03?16:19??MniBMP\MniBMP\Debug\BuildLog.htm
?????文件???????34445??2015-07-03?16:03??MniBMP\MniBMP\Debug\Dib.obj
?????文件???????33993??2015-07-03?16:03??MniBMP\MniBMP\Debug\MainFrm.obj
?????文件?????????920??2015-07-03?16:03??MniBMP\MniBMP\Debug\MniBMP.exe.em
?????文件?????????984??2015-07-03?16:04??MniBMP\MniBMP\Debug\MniBMP.exe.em
?????文件?????????861??2015-07-03?16:19??MniBMP\MniBMP\Debug\MniBMP.exe.intermediate.manifest
?????文件???????35912??2015-07-03?16:03??MniBMP\MniBMP\Debug\MniBMP.obj
?????文件????24772608??2015-07-03?16:03??MniBMP\MniBMP\Debug\MniBMP.pch
?????文件???????30232??2015-07-03?16:03??MniBMP\MniBMP\Debug\MniBMP.res
?????文件???????21044??2015-07-03?16:03??MniBMP\MniBMP\Debug\MniBMPDoc.obj
?????文件???????37630??2015-07-03?16:19??MniBMP\MniBMP\Debug\MniBMPView.obj
?????文件??????????67??2015-07-03?16:19??MniBMP\MniBMP\Debug\mt.dep
?????文件??????463439??2015-07-03?16:03??MniBMP\MniBMP\Debug\stdafx.obj
?????文件??????920576??2015-07-03?16:19??MniBMP\MniBMP\Debug\vc90.idb
?????文件?????2002944??2015-07-03?16:19??MniBMP\MniBMP\Debug\vc90.pdb
?????文件???????19132??2015-07-03?15:36??MniBMP\MniBMP\Dib.cpp
?????文件????????2186??2015-07-03?15:36??MniBMP\MniBMP\Dib.h
?????文件????????1953??2015-07-03?15:32??MniBMP\MniBMP\MainFrm.cpp
?????文件?????????739??2015-07-03?15:32??MniBMP\MniBMP\MainFrm.h
?????文件???????69248??2015-07-03?16:01??MniBMP\MniBMP\MniBMP.aps
............此處省略19個文件信息
- 上一篇:C程序設計(第四版)(清華出版.譚浩強).PDF
- 下一篇:MFC停車場管理系統項目
評論
共有 條評論