bitmap.cpp
来自「一个小的类似于雷电的射击游戏」· C++ 代码 · 共 103 行
CPP
103 行
#include "StdAfx.h"
#include "Bitmap.h"
//--------------------------------------------
// 构造函数
//--------------------------------------------
Bitmap::Bitmap(char *filename,
BOOL bTransMode = FALSE,
COLORREF crTransColor=RGB(255, 0, 255)):
m_hBitmap(NULL),
m_hMask(NULL),
m_iWidth(0),
m_iHeight(0),
m_bTransMode(bTransMode),
m_crTransColor(crTransColor)
{
Load(filename);
if(m_bTransMode)
CreateMask();
}
//--------------------------------------------
// 释构函数
//--------------------------------------------
Bitmap::~Bitmap()
{
DeleteObject(m_hBitmap);
}
//--------------------------------------------
// Load()
// 载入图像文件
//--------------------------------------------
void Bitmap::Load(char *filename)
{
DeleteObject(m_hBitmap);
m_hBitmap = (HBITMAP)LoadImage(
NULL,
filename,
IMAGE_BITMAP,
0,
0,
LR_LOADFROMFILE | LR_CREATEDIBSECTION
);
DIBSECTION ds;
GetObject(m_hBitmap, sizeof(ds), &ds);
m_iWidth = ds.dsBmih.biWidth;
m_iHeight = ds.dsBmih.biHeight;
}
//--------------------------------------------
// CreateMask()
// 载入图像文件
//--------------------------------------------
void Bitmap::CreateMask()
{
m_hMask = CreateBitmap(m_iWidth, m_iHeight, 1, 1, NULL);
HDC bmpDC = CreateCompatibleDC(0);
HDC maskDC = CreateCompatibleDC(0);
SelectObject(bmpDC, m_hBitmap);
SelectObject(maskDC, m_hMask);
SetBkColor(bmpDC, m_crTransColor);
BitBlt(maskDC, 0, 0, m_iWidth, m_iHeight, bmpDC, 0, 0, SRCCOPY);
SetBkColor(bmpDC, RGB(0, 0, 0));
SetTextColor(bmpDC, RGB(255, 255, 255));
BitBlt(bmpDC, 0, 0, m_iWidth, m_iHeight, maskDC, 0, 0, SRCAND);
DeleteDC(bmpDC);
DeleteDC(maskDC);
}
//--------------------------------------------
// Draw()
// 输出到设备场景上
//--------------------------------------------
void Bitmap::Draw(HDC hDC, int dx=0, int dy=0, int dw=0, int dh=0, int sx=0, int sy=0)
{
if (!dw)
dw = m_iWidth;
if (!dh)
dh = m_iHeight;
HDC bmpDC = CreateCompatibleDC(hDC);
SelectObject(bmpDC, m_hBitmap);
if (m_bTransMode)
{
HDC maskDC = CreateCompatibleDC(hDC);
SelectObject(maskDC, m_hMask);
BitBlt(hDC, dx, dy, dw, dh, maskDC, sx, sy, SRCAND);
BitBlt(hDC, dx, dy, dw, dh, bmpDC, sx, sy, SRCPAINT);
DeleteDC(maskDC);
}
else
BitBlt(hDC, dx, dy, dw, dh, bmpDC, sx, sy, SRCCOPY);
DeleteDC(bmpDC);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?