• 大小: 15.8MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-16
  • 语言: C/C++
  • 标签: MFC  BMP  变灰  

资源简介

基于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.embed.manifest
     文件         984  2015-07-03 16:04  MniBMP\MniBMP\Debug\MniBMP.exe.embed.manifest.res
     文件         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个文件信息

评论

共有 条评论