资源简介
基于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停车场管理系统项目
相关资源
- MFC停车场管理系统项目
- MFC邮件客户端支持收发邮件
- Visual C++ MFC 源代码大全
- 兄弟彩色打印机 DCP-9020CDN MFC-9140CDN-
- 在MFC框架中使用Coin3D
- MFC使用ADO方式操作Access数据库
- MFC/GDI+绘制倾斜的椭圆
- WAV转换成MP3音频文件 C++ vc MFC
- 《MFC游戏开发》笔记九 碰撞检测 怪物
- MFC游戏开发6by七十一雾央
- MFC+开发人员指南.pdf
- MFC 套接字Socket文件传输
- 源代码——MFC的WebBrowser控件 C++与ja
- 基于mfc和sql的学生信息管理系统
- MFC c++ 实现简易电话簿
- visual c++ 自绘控件 菜单 MFC界面 资源
- 兄弟 DCP-7080 7080D 7180DN MFC7380 7480D 788
- 基于数据库的MFC登陆验证系统
- C语言的png和jpeg图片格式转换为bmp格式
- vc++之mfc屏幕监控系统源代码
- mfc下实现的学生成绩管理系统
- C++ MFC连接数据库(VisualStudio开发)
- 整理C++实现excel和wps表格读写
- 基于OpenCV的人脸验证和人脸识别MFC程
- ffmpeg简易播放器-音视频同步
- MFC.Windows程序设计.第二版英文版.pdf
- MFC通过OpenCV 显示到Picture control
- Halcon+MFC实现相机畸变校正与手眼九点
- dll封装MFC对话框资源
- 吃豆子游戏 C++
评论
共有 条评论