📄 bitmap.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 + -