关于自己用C++创建一个设备无关类CDib头文件和对CPP中一些错误之处的修改---yak@zx

本文档介绍了C++中创建设备无关位图类CDib的实现,包括构造函数、析构函数、加载与保存位图文件的方法。在代码中,针对一些错误进行了修正,如字符串拷贝问题、文件读取和保存过程中的错误。此外,还提供了获取位图信息、转换位图色彩等辅助函数。
摘要由CSDN通过智能技术生成
 //****************************************cpp中的错误修改的地方已经明确说明修改原由***************************
//======================================================================  
// 文件: 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 失败  
//=====================================&

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值