• 读取位图的类


    今天写了一个读取位图的类,体会到了一个类的分装性,当一个数据成员是protected类型时,我们在类中专门写了一个函数来访问这个变量,如同c#中的属性与方法。

    ////

    这是位图类的头文件

    Dib.h: interface for the CDib class.
    //
    //////////////////////////////////////////////////////////////////////

    #if !defined(AFX_DIB_H__ACDEA2B4_090A_4299_AB15_3970423DEC4C__INCLUDED_)
    #define AFX_DIB_H__ACDEA2B4_090A_4299_AB15_3970423DEC4C__INCLUDED_

    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000

    class CDib:public CObject
    {
    public:
     CDib();
     virtual ~CDib();
    protected:
     LPBITMAPFILEHEADER m_pBmFileHeader;
     LPBITMAPINFO m_pBmInfo;
     LPBITMAPINFOHEADER m_pBmInfoHeader;
     RGBQUAD * m_pRGBTable;
     BYTE* m_pDibBits;
     UINT m_numColors;
    public:
     BYTE* GetDibBitsPtr();
     LPBITMAPINFO GetDIbInfoPtr();
     LPBITMAPINFOHEADER GetDibInfoHeaderPtr();
     UINT GetDibHeight();
     UINT GetDibWidth();
     DWORD GetDibSizeImage();
     CDib(const char *fileNmae);
    protected:
     void LoadBitmapFile(const char* fileName);
    };

    #endif // !defined(AFX_DIB_H__ACDEA2B4_090A_4299_AB15_3970423DEC4C__INCLUDED_)

    这是cpp文件s

    //// Dib.cpp: implementation of the CDib class.
    //
    //////////////////////////////////////////////////////////////////////

    #include "stdafx.h"
    #include "Open.h"
    #include "Dib.h"
    #include "windowsX.h"
    #ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endif

    //////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////

    CDib::CDib()
    {
     m_pBmFileHeader=NULL;
     m_pBmInfo=NULL;
     m_pBmInfoHeader=NULL;
     m_pRGBTable=0;
     m_pDibBits=0;
    }
    CDib::CDib(const char * fileName)
    {
     LoadBitmapFile(fileName);
    }

    CDib::~CDib()
    {
    GlobalFree(m_pBmInfo);
    }
    void CDib::LoadBitmapFile(const char *fileName)
    {
     CFile file(fileName,CFile::modeRead);
     BITMAPFILEHEADER bmFileHeader;
     file.Read((void*)&bmFileHeader,sizeof(bmFileHeader));
     if(bmFileHeader.bfType!=0x4d42)
     {
      AfxMessageBox("Not a bitmap file");
      m_pBmFileHeader=0;
      m_pBmInfo=0;
      m_pBmInfoHeader=0;
      m_pRGBTable=0;
      m_pDibBits=0;
      m_numColors=0;
     }
     else
     {
      DWORD fileLength=file.GetLength();
      DWORD dibSize=fileLength-sizeof(bmFileHeader);


      BYTE *pDib=(BYTE*)GlobalAllocPtr(GMEM_MOVEABLE,dibSize);
      pDib=new BYTE[dibSize];
      file.Read(pDib,dibSize);
      file.Close();


      m_pBmInfo=(LPBITMAPINFO)pDib;
      m_pBmInfoHeader=(LPBITMAPINFOHEADER)pDib;
      
      m_pBmInfoHeader->biSizeImage=GetDibSizeImage();

      m_pDibBits=pDib+m_pBmInfoHeader->biSize;
     
     }
    }
    DWORD CDib::GetDibSizeImage()
    {
     if(m_pBmInfoHeader->biSizeImage==0)
     {
      DWORD byteWidth=(DWORD)GetDibWidth();
      DWORD height=(DWORD)GetDibHeight();
      DWORD imageSize=byteWidth*height;
      return imageSize;
     }
     else
      return m_pBmInfoHeader->biSizeImage;
    }
    UINT CDib::GetDibWidth()
    {
     return (UINT)m_pBmInfoHeader->biWidth;

    }
    UINT CDib::GetDibHeight()
    {
     return (UINT)m_pBmInfoHeader->biHeight;
    }
    LPBITMAPINFOHEADER CDib::GetDibInfoHeaderPtr()
    {
     return m_pBmInfoHeader;
    }
    LPBITMAPINFO CDib::GetDIbInfoPtr()
    {
     return m_pBmInfo;
    }
    BYTE* CDib::GetDibBitsPtr()
    {
     return m_pDibBits;

    }

  • 相关阅读:
    C语言实现数据机构链表的基本操作(从键盘输入生成链表、读取数组生成链表)
    MySql-8.0.x免安装版下载与配置,Navicat打开数据库链接报错1251的解决办法
    win10彻底卸载和删除MySql
    Linux/(centos、unix等)的ssh双向免密登录原理和实现
    笔趣阁小说-圣墟-爬虫源代码
    C语言实现顺序表的基本操作(从键盘输入 生成线性表,读txt文件生成线性表和数组生成线性表----三种写法)
    python语言开发环境配置
    Python闭包详解
    结对作业
    Java第九次作业——接口回调
  • 原文地址:https://www.cnblogs.com/gaoteng/p/2350395.html
Copyright © 2020-2023  润新知