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

📄 bitmap.cpp

📁 这程序是基于VC++/MFC机制应用开发的一款英语单词连连看游戏
💻 CPP
字号:
#include "stdafx.h"
#include "Bitmap.h"
//*****************************************************************
//Bitmap类实现
//******************************************************************
//--------------------------------------------
//  构造函数
//--------------------------------------------
//构造函数。
//传入所要使用的图片名称和贴图方式以及透明色,就算完成准备工作了
//Parameters:
//fn:指名要使用的图片文件的文件名
//transmode:是否需要透明贴图。默认值是:是
//transcolor:需要透明的颜色。由于每一幅图片的背景都不是我们所需要的,所以需要去掉背景色。
//transcolor指明了所需去掉的背景色
//Return:没有返回值
//Remarks:如果transmode=false,则不会理会后面的transcolor
Bitmap::Bitmap(char *fn, BOOL transmode = false, COLORREF transcolor = RGB(255, 0, 255)):
	m_hbmp(NULL),
	m_hmask(NULL),
	m_ibmpw(0),
	m_ibmph(0),
	m_bTransMode(transmode),
	m_clrTransColor(transcolor)
{
	Load(fn);
	if(m_bTransMode)
		CreateMask();
}

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

//--------------------------------------------
//  Load()
//  载入图像文件
//--------------------------------------------
//参数:文件名称
//输出:为句柄hbmp填充了信息
void Bitmap::Load(char *fn)
{
	DeleteObject(m_hbmp);
	//从文件加载位图获得相关信息
	m_hbmp = (HBITMAP)LoadImage(
		NULL,
		fn,
		IMAGE_BITMAP,
		0,
		0,
		LR_LOADFROMFILE | LR_CREATEDIBSECTION
		);
	DIBSECTION		ds;
	GetObject(m_hbmp, sizeof(ds), &ds);
	m_ibmpw = ds.dsBmih.biWidth;
	m_ibmph = ds.dsBmih.biHeight;
}

//--------------------------------------------
//  CreateMask()
//  创建掩模图
//--------------------------------------------
void Bitmap::CreateMask()
{
	m_hmask = CreateBitmap(m_ibmpw, m_ibmph, 1, 1, NULL);
	HDC bmpDC = CreateCompatibleDC(0);//创建和当前屏幕兼容的设备上下文
	HDC maskDC = CreateCompatibleDC(0);
	SelectObject(bmpDC, m_hbmp);
	SelectObject(maskDC, m_hmask);
	//制作掩模图
	SetBkColor(bmpDC, m_clrTransColor);
	BitBlt(maskDC, 0, 0, m_ibmpw, m_ibmph, bmpDC, 0, 0, SRCCOPY);
	SetBkColor(bmpDC, RGB(0, 0, 0));
	SetTextColor(bmpDC, RGB(255, 255, 255));
	BitBlt(bmpDC, 0, 0, m_ibmpw, m_ibmph, maskDC, 0, 0, SRCAND);

	DeleteDC(bmpDC);
	DeleteDC(maskDC);
}

//--------------------------------------------
//  Draw()
//  输出到设备场景上
//--------------------------------------------
//参数:
//ddc:设备文本句柄
//dx:贴图的左上角横坐标
//dy:贴图的左上角坐标
//dw:贴图的宽
//dh:贴图的高
//sx:在原图片上剪取位置的左上角横坐标
//sy:在原图片上剪取位置的左上角纵坐标
//返回:无
//输出:去背的图片被贴到指定的设备文本
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 = m_ibmpw;
	if(!dh) dh = m_ibmph;

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

	if(m_bTransMode)
	{
		HDC maskDC = CreateCompatibleDC(ddc);
		SelectObject(maskDC, m_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 + -