基于MFC实现BMP的显示24色变灰
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-07-03 16:19 MniBMP
目录 0 2015-07-03 16:03 MniBMPDebug
文件 151552 2015-07-03 16:19 MniBMPDebugMniBMP.exe
文件 1405600 2015-07-03 16:19 MniBMPDebugMniBMP.ilk
文件 3435520 2015-07-03 16:19 MniBMPDebugMniBMP.pdb
目录 0 2015-07-03 16:21 MniBMPMniBMP
文件 18582528 2015-07-03 16:22 MniBMPMniBMP.ncb
文件 884 2015-07-03 15:32 MniBMPMniBMP.sln
文件 16896 2015-07-03 16:22 MniBMPMniBMP.suo
文件 2305078 2015-07-03 16:22 MniBMPMniBMP2.BMP
目录 0 2015-07-03 16:19 MniBMPMniBMPDebug
文件 5976 2015-07-03 16:19 MniBMPMniBMPDebugBuildLog.htm
文件 34445 2015-07-03 16:03 MniBMPMniBMPDebugDib.obj
文件 33993 2015-07-03 16:03 MniBMPMniBMPDebugMainFrm.obj
文件 920 2015-07-03 16:03 MniBMPMniBMPDebugMniBMP.exe.embed.manifest
文件 984 2015-07-03 16:04 MniBMPMniBMPDebugMniBMP.exe.embed.manifest.res
文件 861 2015-07-03 16:19 MniBMPMniBMPDebugMniBMP.exe.intermediate.manifest
文件 35912 2015-07-03 16:03 MniBMPMniBMPDebugMniBMP.obj
文件 24772608 2015-07-03 16:03 MniBMPMniBMPDebugMniBMP.pch
文件 30232 2015-07-03 16:03 MniBMPMniBMPDebugMniBMP.res
文件 21044 2015-07-03 16:03 MniBMPMniBMPDebugMniBMPDoc.obj
文件 37630 2015-07-03 16:19 MniBMPMniBMPDebugMniBMPView.obj
文件 67 2015-07-03 16:19 MniBMPMniBMPDebugmt.dep
文件 463439 2015-07-03 16:03 MniBMPMniBMPDebugstdafx.obj
文件 920576 2015-07-03 16:19 MniBMPMniBMPDebugvc90.idb
文件 2002944 2015-07-03 16:19 MniBMPMniBMPDebugvc90.pdb
文件 19132 2015-07-03 15:36 MniBMPMniBMPDib.cpp
文件 2186 2015-07-03 15:36 MniBMPMniBMPDib.h
文件 1953 2015-07-03 15:32 MniBMPMniBMPMainFrm.cpp
文件 739 2015-07-03 15:32 MniBMPMniBMPMainFrm.h
文件 69248 2015-07-03 16:01 MniBMPMniBMPMniBMP.aps
............此处省略19个文件信息
//======================================================================
// 文件: 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 MniBMPDebug
文件 151552 2015-07-03 16:19 MniBMPDebugMniBMP.exe
文件 1405600 2015-07-03 16:19 MniBMPDebugMniBMP.ilk
文件 3435520 2015-07-03 16:19 MniBMPDebugMniBMP.pdb
目录 0 2015-07-03 16:21 MniBMPMniBMP
文件 18582528 2015-07-03 16:22 MniBMPMniBMP.ncb
文件 884 2015-07-03 15:32 MniBMPMniBMP.sln
文件 16896 2015-07-03 16:22 MniBMPMniBMP.suo
文件 2305078 2015-07-03 16:22 MniBMPMniBMP2.BMP
目录 0 2015-07-03 16:19 MniBMPMniBMPDebug
文件 5976 2015-07-03 16:19 MniBMPMniBMPDebugBuildLog.htm
文件 34445 2015-07-03 16:03 MniBMPMniBMPDebugDib.obj
文件 33993 2015-07-03 16:03 MniBMPMniBMPDebugMainFrm.obj
文件 920 2015-07-03 16:03 MniBMPMniBMPDebugMniBMP.exe.em
文件 984 2015-07-03 16:04 MniBMPMniBMPDebugMniBMP.exe.em
文件 861 2015-07-03 16:19 MniBMPMniBMPDebugMniBMP.exe.intermediate.manifest
文件 35912 2015-07-03 16:03 MniBMPMniBMPDebugMniBMP.obj
文件 24772608 2015-07-03 16:03 MniBMPMniBMPDebugMniBMP.pch
文件 30232 2015-07-03 16:03 MniBMPMniBMPDebugMniBMP.res
文件 21044 2015-07-03 16:03 MniBMPMniBMPDebugMniBMPDoc.obj
文件 37630 2015-07-03 16:19 MniBMPMniBMPDebugMniBMPView.obj
文件 67 2015-07-03 16:19 MniBMPMniBMPDebugmt.dep
文件 463439 2015-07-03 16:03 MniBMPMniBMPDebugstdafx.obj
文件 920576 2015-07-03 16:19 MniBMPMniBMPDebugvc90.idb
文件 2002944 2015-07-03 16:19 MniBMPMniBMPDebugvc90.pdb
文件 19132 2015-07-03 15:36 MniBMPMniBMPDib.cpp
文件 2186 2015-07-03 15:36 MniBMPMniBMPDib.h
文件 1953 2015-07-03 15:32 MniBMPMniBMPMainFrm.cpp
文件 739 2015-07-03 15:32 MniBMPMniBMPMainFrm.h
文件 69248 2015-07-03 16:01 MniBMPMniBMPMniBMP.aps
............此处省略19个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)