📄 mydib.cpp
字号:
//MYDIB.CPP BMP 拳老阑 免仿窍绰 努贰胶
//#include <afx.h>
//#include <AfxWin.h>
#include <windows.h>
#include <stdio.h>
#include "mydib.h"
// KRN 颇老肺何磐 努贰胶 按眉甫 积己茄促.
CMyDib::CMyDib(char *szFilename, unsigned long dwFilePointer)
{
BITMAPFILEHEADER fh; //bmp 拳老狼 庆歹
m_lpDib = NULL; //捞固瘤 器牢磐客 滚欺甫 null肺 汲沥茄促.
HANDLE hFileRead;
DWORD nCount;
char PathName[28];
wsprintf( PathName, "sprites\\%s.pak", szFilename );
hFileRead = CreateFile(PathName, GENERIC_READ, NULL, NULL, OPEN_EXISTING, NULL, NULL);
SetFilePointer(hFileRead, dwFilePointer, NULL, FILE_BEGIN);
ReadFile(hFileRead, (char *)&fh, 14, &nCount, NULL);//sizeof(bmpHeader)==14
m_lpDib = (LPSTR)new char[fh.bfSize-14];
ReadFile(hFileRead, (char *)m_lpDib, fh.bfSize-14, &nCount, NULL);
CloseHandle(hFileRead);
LPBITMAPINFOHEADER bmpInfoHeader = (LPBITMAPINFOHEADER)m_lpDib;
m_bmpInfo = (LPBITMAPINFO)m_lpDib;
m_wWidthX = (WORD)(bmpInfoHeader->biWidth);
m_wWidthY = (WORD)(bmpInfoHeader->biHeight);
if (bmpInfoHeader->biClrUsed == 0)
{
if(bmpInfoHeader->biBitCount == 24) m_wColorNums = 0;
else if(bmpInfoHeader->biBitCount == 8) m_wColorNums = 256;
else if(bmpInfoHeader->biBitCount == 1) m_wColorNums = 2;
else if(bmpInfoHeader->biBitCount == 4) m_wColorNums = 16;
else m_wColorNums = 0;
}
else m_wColorNums = (WORD)(bmpInfoHeader->biClrUsed);
}
CMyDib::~CMyDib()
{
if(m_lpDib != NULL) delete[] m_lpDib;
}
void CMyDib::PaintImage(HDC hDC)
{
if (m_lpDib == NULL) return;
SetDIBitsToDevice(hDC, 0, 0, m_wWidthX, m_wWidthY, 0, 0, 0, m_wWidthY, m_lpDib + *(LPDWORD)m_lpDib + 4*m_wColorNums, m_bmpInfo, DIB_RGB_COLORS);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -