4.05 位图

位图即是资源,又是 GDI 绘图对象

● 位图相关

  • 光栅图形: 记录图像中每一点的颜色等信息
  • 矢量图形: 记录图像算法、绘图指令等
  • HBITMAP: 位图句柄

● 位图的使用(成像)

1)在资源中添加位图资源

2)从资源中加载位图 LoadBitmap

3)创建一个与当前 DC 相匹配的 DC(内存 DC)

  1. HDC CreateCompatibleDC(
  2. HDChdc //当前DC句柄,可以为NULL(使用屏幕DC)
  3. );返回创建好的内存DC句柄

4)将位图放入匹配的内存 DC 中(现在内存里画好) SelectObject 5)成像(1:1)

  1. BOOL BitBIt(
  2. HDC hdcDest, //目的DO(窗口DC)
  3. int nXDest, //目的左上X坐标
  4. int nYDest,//目的左上Y坐标
  5. int nWidth,//目的宽度
  6. int nHeiqht, //目的高度
  7. HDC hdcSrc, //源DC(内存DC)
  8. int nXSrc //源左上X坐标
  9. int nYSrc//源左上Y坐标
  10. DWORD dwRop //成像方法 SRCCOPY-原样
  11. );

5.2 缩放成像

  1. BOOL StretchBlt(
  2. // handle to destination DC
  3. HDC hdcDest,
  4. int nXOriginDest, // x-coord of destination upper-left corner
  5. int nYOriginDest, // y-coord of destination upper-left corner
  6. int nWidthDest, // width of destination rectangle
  7. int nHeightDest, // height of destination rectangle
  8. HDC hdcsrc, // handle to source DC
  9. int nXOriginSrc, // x-coord of source upper-left corner
  10. int nYOriginSrc, // y-coord of source upperleft corner
  11. int nWidthSrc,//源DC宽
  12. int nHeiqhtSrc, //源DC高
  13. DWORD dwRop // raster operation code
  14. )

6)取出位图

SelectObject

7)释放位图

DeleteObject

8)释放匹配的 DC(内存 DC)

DeleteDC

示例

  1. PAINTSTRUCT ps = { 0 };
  2. HDC hdc = BeginPaint(hWnd, &ps);
  3. // 添加位图(可视化添加)
  4. // 加载位图
  5. LoadBitmap(hIns,(char*)IDB_BITMAP1);
  6. // 创建内存DC
  7. HDC hMemdc = CreateCompatibleDC(hdc);
  8. // 放入内存
  9. HGDIOBJ nOldBmp = SelectObject(hMemdc,hBmp);
  10. // 完整成像
  11. BitBlt(
  12. hdc,
  13. 100,100,
  14. 48,48, // 位图大小
  15. hMemdc,
  16. 0,0,
  17. SRCCOPY
  18. );
  19. // 缩放成像
  20. StretchBlt(
  21. hdc,
  22. 100,100,
  23. 24,24, // 位图大小, 也可以放大成像,如 96,96
  24. hMemdc,
  25. 0,0,48,48,
  26. SRCCOPY
  27. )
  28. // 把原来的内存位图还回去
  29. SelectObject(hMemdc,nOldBmp);
  30. // 释放自个的位图
  31. DeleteObject(hMemdc);
  32. // 释放内存DC
  33. DeleteDC(hMemdc);