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

📄 bitmap.cpp

📁 vc++ 飞机游戏1,是一种好玩的游戏,初学程序设计,这是个好开始!
💻 CPP
字号:
#include "stdafx.h"
#include "Bitmap.h"

//--------------------------------------------
//  构造函数
//--------------------------------------------
Bitmap::Bitmap(char *fn, BOOL transmode=false, COLORREF transcolor=RGB(255, 0, 255)):
	hbmp(NULL),
	hmask(NULL),
	w(0),
	h(0),
	bTransMode(transmode),
	TransColor(transcolor)
{
	Load(fn);
	if(bTransMode)
		CreateMask();
}

//--------------------------------------------
//  释构函数
//--------------------------------------------
Bitmap::~Bitmap()
{
	DeleteObject(hbmp);
}

//--------------------------------------------
//  Load()此函数将在界面初始化中掉用
//  载入图像文件
//--------------------------------------------
void Bitmap::Load(char *fn)
{
	DeleteObject(hbmp);//释放当前的内存设备环境
	hbmp=(HBITMAP)LoadImage(
		NULL,
		fn,
		IMAGE_BITMAP,
		0,
		0,
		LR_LOADFROMFILE | LR_CREATEDIBSECTION
		);//载入一个位图文件并在内存中保存下来赋给hbmp
	DIBSECTION		ds;
	GetObject(hbmp, sizeof(ds), &ds);//获取位图对象的参数
	w=ds.dsBmih.biWidth;//获得位图的宽
	h=ds.dsBmih.biHeight;//获得位图的高
}

//--------------------------------------------
//  CreateMask()
//  载入图像文件
//--------------------------------------------
void Bitmap::CreateMask()
{
	hmask=CreateBitmap(w, h, 1, 1, NULL);//创建一个位图文件并在内存中保存下来赋给hmask
	HDC bmpDC=CreateCompatibleDC(0);//创建一个内存设备环境,以便位图在内存中保存下来,并与指定窗口设备环境相兼容
	HDC maskDC=CreateCompatibleDC(0);//创建一个内存设备环境,以便位图在内存中保存下来,并与指定窗口设备环境相兼容
	SelectObject(bmpDC, hbmp);//将位图对象选入内存设备环境中
	SelectObject(maskDC, hmask);//将位图对象选入指定内存设备环境中

	SetBkColor(bmpDC, TransColor);//设计该环境的颜色
	BitBlt(maskDC, 0, 0, w, h, bmpDC, 0, 0, SRCCOPY);//将位图复制到实际设备环境中
	SetBkColor(bmpDC, RGB(0, 0, 0));
	SetTextColor(bmpDC, RGB(255, 255, 255));
	BitBlt(bmpDC, 0, 0, w, h, maskDC, 0, 0, SRCAND);

	DeleteDC(bmpDC);//关闭设备环境
	DeleteDC(maskDC);
}

//--------------------------------------------
//  Draw()
//  输出到设备场景上
//--------------------------------------------
void Bitmap::Draw(HDC ddc, int dx=0, int dy=0, int dw=0, int dh=0, int sx=0, int sy=0)
{
	if(!dw) dw=w;
	if(!dh) dh=h;

	HDC bmpDC=CreateCompatibleDC(ddc);
	SelectObject(bmpDC, hbmp);

	if(bTransMode)
	{
		HDC maskDC=CreateCompatibleDC(ddc);
		SelectObject(maskDC, hmask);

		BitBlt(ddc, dx, dy, dw, dh, maskDC, sx, sy, SRCAND);
		BitBlt(ddc, dx, dy, dw, dh, bmpDC, sx, sy, SRCPAINT);

		DeleteDC(maskDC);
	}
	else
		BitBlt(ddc, dx, dy, dw, dh, bmpDC, sx, sy, SRCCOPY);

	DeleteDC(bmpDC);
}

⌨️ 快捷键说明

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