zoukankan      html  css  js  c++  java
  • 读取位图的类

    今天写了一个读取位图的类,体会到了一个类的分装性,当一个数据成员是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;

    }

  • 相关阅读:
    命名规范
    操作文件和目录
    使用本地shadow socks代理
    发送邮件
    sql参数化
    定义常量
    获取嵌套字典值的方法
    通过字符串调用函数
    用字典优化过长的if 语句
    操作文件和目录
  • 原文地址:https://www.cnblogs.com/gaoteng/p/2350395.html
Copyright © 2011-2022 走看看