⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdib.cpp

📁 东南大学版本
💻 CPP
字号:
#include "stdafx.h"
#include "CDib.h"
#include "windowsx.h"
#include "windows.h"

CDib::CDib()
{
	size=0;
	MM=0;
}

CDib::~CDib()
{
	GlobalFreePtr(m_pBitmapInfo);   
}

void CDib::LoadFile(const char* dibFileName)
{
	strcpy(m_fileName,dibFileName);
	CFile dibFile(m_fileName,CFile::modeRead);
	dibFile.Read((void*)&bitmapFileHeader,sizeof(BITMAPFILEHEADER));

	if(bitmapFileHeader.bfType==0x4d42)
	{
		DWORD fileLength=dibFile.GetLength();
		size=fileLength-sizeof(BITMAPFILEHEADER);
		pDib=(BYTE*)GlobalAllocPtr(GMEM_MOVEABLE,size);
		dibFile.Read((void*)pDib,size);
		dibFile.Close();
		m_pBitmapInfo=(BITMAPINFO*)pDib;
		m_pBitmapInfoHeader=(BITMAPINFOHEADER*)pDib;
		m_pRGB=(RGBQUAD*)(pDib+m_pBitmapInfoHeader->biSize);
		int m_numberOfColors=GetNumberOfColors();
		if(m_pBitmapInfoHeader->biClrUsed==0)
            m_pBitmapInfoHeader->biClrUsed=m_numberOfColors;
		DWORD colorTableSize=m_numberOfColors*sizeof(RGBQUAD);
		m_pData=pDib+m_pBitmapInfoHeader->biSize+colorTableSize;
		if(m_pRGB==(RGBQUAD*)m_pData)
			m_pRGB=NULL;
		m_pBitmapInfoHeader->biSizeImage=GetSize();
		m_valid=0;
	}
	else
	{
		m_valid=FALSE;
		AfxMessageBox("非位图!");
	}
}
BOOL CDib::IsValid()
{
	return m_valid;
}
char* CDib::GetFileName()
{
	return m_fileName;
}
UINT CDib::GetWidth()
{
	return (UINT) m_pBitmapInfoHeader->biWidth;
}
UINT CDib::GetHeight()
{
	return (UINT) m_pBitmapInfoHeader->biHeight;
}
DWORD CDib::GetSize()
{
	if(m_pBitmapInfoHeader->biSizeImage!=0)
		return m_pBitmapInfoHeader->biSizeImage;
	else
	{
		DWORD height=(DWORD)GetHeight();
		DWORD width=(DWORD)GetWidth();
		return height*width;
	}
}
UINT CDib::GetNumberOfColors()
{
	int numberOfColors;
	if((m_pBitmapInfoHeader->biClrUsed==0)&&(m_pBitmapInfoHeader->biBitCount<9))
	{
		switch(m_pBitmapInfoHeader->biBitCount)
		{
		case 1: numberOfColors=2;break;
		case 4: numberOfColors=16;break;
		case 8: numberOfColors=256;
		}
	}
	else
		numberOfColors=(int)m_pBitmapInfoHeader->biClrUsed;
	return numberOfColors;
}
BYTE* CDib::GetData()
{
	return m_pData;
}
RGBQUAD* CDib::GetRGB()
{
	return m_pRGB;
}
BITMAPINFO* CDib::GetInfo()
{
	return m_pBitmapInfo;
}
WORD CDib::PaletteSize(LPBYTE lpDIB)
{
	return (DIBNumColors(lpDIB)*sizeof(RGBTRIPLE));
}
WORD CDib::DIBNumColors(LPBYTE lpDIB)
{
	WORD wBitCount;
	wBitCount=((LPBITMAPCOREHEADER)lpDIB)->bcBitCount;
	switch(wBitCount)
	{
	case 1: return 2;
	case 4: return 16;
	case 8: return 256;
	default: return 0;
	}
}
void CDib::SaveFile(const CString filename)
{
	strcpy(m_fileName,filename);
	CFile dibFile(m_fileName,CFile::modeCreate|CFile::modeWrite);
	dibFile.Write((void*)&bitmapFileHeader,sizeof(BITMAPFILEHEADER));
	dibFile.Write((void*)pDib,size);
	dibFile.Close();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -