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