//======================================================================
// 文件: Dib.h
// 内容: 设备无关位图类-头文件
// 功能: (1)位图的加载与保存;
// (2)位图信息的获取;
// (3)位图数据的获取;
// (3)位图的显示;
// (4)位图的转换;
// (5)位图相关判断;
//======================================================================
#pragma once
//********************************
#include <afx.h>
#include "afx.h"
#include "stdafx.h"
//*************************************
class CDib : public CObject
{
public:
// 位图是否加载
BOOL m_bLoaded;
public:
// 构造函数,初始化数据成员
CDib(void);
// 析构函数,释放内存空间
~CDib(void);
// 从文件加载位图
BOOL LoadFromFile(LPCTSTR lpszPath);
// 将位图保存到文件
BOOL SaveToFile(LPCTSTR lpszPath);
// 获取位图文件名
LPCTSTR GetFileName();
// 获取位图宽度
LONG GetWidth();
// 获取位图高度
LONG GetHeight();
// 获取位图的宽度和高度
CSize GetDimension();
// 获取位图大小
DWORD GetSize();
// 获取单个像素所占位数
WORD GetBitCount();
// 获取每行像素所占字节数
UINT GetLineByte();
// 获取位图颜色数
DWORD GetNumOfColor();
// 获取位图颜色表
LPRGBQUAD GetRgbQuad();
// 获取位图数据
LPBYTE GetData();
// 显示位图
BOOL Draw(CDC *pDC, CPoint origin, CSize size);
// 24位彩色位图转8位灰度位图
BOOL RgbToGrade();
// 8位灰度位图转24位彩色位图
BOOL GradeToRgb();
// 判断是否含有颜色表
BOOL HasRgbQuad();
// 判断是否是灰度图
BOOL IsGrade();
// 判断位图是否有效
BOOL IsValid();
protected:
// 计算位图颜色表长度
DWORD CalcRgbQuadLength();
// 根据颜色表生成调色板
BOOL MakePalette();
// 清理空间
void Empty(BOOL bFlag = TRUE);
private:
// 位图文件名
//********************************************有几种不同的定义*********
//char m_fileName[_MAX_PATH];
//char* m_fileName[_MAX_PATH];
//LPCTSTR m_fileName[MAX_PATH];
CString m_fileName[_MAX_PATH];
//最终选择CString 定义为它的对象
// 位图文件头指针
LPBITMAPFILEHEADER m_lpBmpFileHeader; // 需要动态分配和释放
// 位图指针(包含除位图文件头的所有内容)
LPBYTE m_lpDib; // 需要动态分配和释放
// 位图信息指针
LPBITMAPINFO m_lpBmpInfo;
// 位图信息头指针
LPBITMAPINFOHEADER m_lpBmpInfoHeader;
// 位图颜色表指针
LPRGBQUAD m_lpRgbQuad;
// 位图数据指针
LPBYTE m_lpData;
// 调色板句柄
HPALETTE m_hPalette;
// 是否有颜色表
BOOL m_bHasRgbQuad;
// 位图是否有效
BOOL m_bValid;
};
//cpp文件***********************************************************
//*****************************//
//======================================================================
// 文件: Dib.cpp
// 内容: 设备无关位图类-源文件
// 功能: (1)位图的加载与保存;
// (2)位图信息的获取;
// (3)位图数据的获取;
// (3)位图的显示;
// (4)位图的转换;
// (5)位图相关判断;
//======================================================================
#include "stdafx.h"
#include <afx.h>
#include "图像处理通用.h"
//=======================================================
// 函数功能: 构造函数,初始化数据成员
// 输入参数: 无
// 返回值: 无
//=======================================================
CDib::CDib(void)
{
// 数据成员初始化
//*****************************几种方式修改********
//1.(m_fileName, "");
//2.strcpy(m_fileName, (LPCTSTR)"");
//3.
/*char *p = "";
m_fileName =p;*/
//4.
//m_fileName = " ";
//5.
//m_fileName.Empty();
//6.
CString m_fileName = _T(" ");
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;
m_bLoaded = FALSE;
}
//=======================================================
// 函数功能: 析构函数,释放内存空间
// 输入参数: 无
// 返回值: 无
//=======================================================
CDib::~CDib(void)
{
// 清理空间
Empty();
}
//=======================================================
// 函数功能: 从文件加载位图
// 输入参数: LPCTSTR lpszPath-待加载位图文件路径
// 返回值: BOOL-TRUE 成功;FALSE 失败
//=====================================&