4.05 位图
位图即是资源,又是 GDI 绘图对象
● 位图相关
- 光栅图形: 记录图像中每一点的颜色等信息
- 矢量图形: 记录图像算法、绘图指令等
- HBITMAP: 位图句柄
● 位图的使用(成像)
1)在资源中添加位图资源
2)从资源中加载位图 LoadBitmap
3)创建一个与当前 DC 相匹配的 DC(内存 DC)
HDC CreateCompatibleDC(
HDChdc //当前DC句柄,可以为NULL(使用屏幕DC)
);返回创建好的内存DC句柄
4)将位图放入匹配的内存 DC 中(现在内存里画好) SelectObject 5)成像(1:1)
BOOL BitBIt(
HDC hdcDest, //目的DO(窗口DC)
int nXDest, //目的左上X坐标
int nYDest,//目的左上Y坐标
int nWidth,//目的宽度
int nHeiqht, //目的高度
HDC hdcSrc, //源DC(内存DC)
int nXSrc, //源左上X坐标
int nYSrc,//源左上Y坐标
DWORD dwRop //成像方法 SRCCOPY-原样
);
5.2 缩放成像
BOOL StretchBlt(
// handle to destination DC
HDC hdcDest,
int nXOriginDest, // x-coord of destination upper-left corner
int nYOriginDest, // y-coord of destination upper-left corner
int nWidthDest, // width of destination rectangle
int nHeightDest, // height of destination rectangle
HDC hdcsrc, // handle to source DC
int nXOriginSrc, // x-coord of source upper-left corner
int nYOriginSrc, // y-coord of source upperleft corner
int nWidthSrc,//源DC宽
int nHeiqhtSrc, //源DC高
DWORD dwRop // raster operation code
)
6)取出位图
SelectObject
7)释放位图
DeleteObject
8)释放匹配的 DC(内存 DC)
DeleteDC
示例
PAINTSTRUCT ps = { 0 };
HDC hdc = BeginPaint(hWnd, &ps);
// 添加位图(可视化添加)
// 加载位图
LoadBitmap(hIns,(char*)IDB_BITMAP1);
// 创建内存DC
HDC hMemdc = CreateCompatibleDC(hdc);
// 放入内存
HGDIOBJ nOldBmp = SelectObject(hMemdc,hBmp);
// 完整成像
BitBlt(
hdc,
100,100,
48,48, // 位图大小
hMemdc,
0,0,
SRCCOPY
);
// 缩放成像
StretchBlt(
hdc,
100,100,
24,24, // 位图大小, 也可以放大成像,如 96,96
hMemdc,
0,0,48,48,
SRCCOPY
)
// 把原来的内存位图还回去
SelectObject(hMemdc,nOldBmp);
// 释放自个的位图
DeleteObject(hMemdc);
// 释放内存DC
DeleteDC(hMemdc);