C++-MFC(11)-HBITMAP,CBITMAP,BITMAP 基本定义与使用

在MFC中,如果要操作位图,必然会用到HBITMAP,CBITMAP,BITMAP。
首先区分概念:
BITMAP是C++中定义的位图结构体。

HBITMAP是Windows中使用的位图句柄。

CBitmap是MFC封装的位图类。
1.定义与使用
  1.1
 HBITMAP指针  从文件中录入指针,得到文件句柄
  1.2 CBITMAP类  只能下载工程中的位图资源

  1.3BITMAP         结构体,得到位图中的
还可参看MFC中GDI之MFC中GDI之CBitmap

2.类型之间的互相转换
 


1.定义与使用
  1.1
 HBITMAP指针  从文件中录入指针,得到文件句柄
 

//文件中录入指针,得到文件句柄
//1、HBITMAP->CBitmap  Attach
HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL, str, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
CBitmap cbitmap;
cbitmap.Attach(hBitmap);
//2.得到的指针是临时变量 FromHandle
HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL, str, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);        
CBitmap *pcbitmap=CBitmap::FromHandle(hBitmap);

//HBITMAP  LoadImage从文件中录入bmp文件
//FromHandle得到的指针是临时变量 
//Attach连接的句柄可以长久保留
OnPaint()
{
CString str = _T("E:\\picture\\lena.bmp");
HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL, str, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
CBitmap cbitmap;
cbitmap.Attach(hBitmap);
CPaintDC dc(this);
CDC MemDC;
MemDC.CreateCompatibleDC(&dc);
MemDC.SelectObject(&cbitmap);
CRect rect;
GetClientRect(&rect);
dc.BitBlt(0, 0, rect.Width(), rect.Height(), &MemDC, 0, 0, SRCCOPY);
}

  1.2 CBITMAP类  只能下载工程中的位图资源
 

//获取位图句柄中的数据
//GetBitmapBits只提供给16位版本的窗口
//GetDIBBits
//第一种方法:
HBITMAP hbitmap = (HBITMAP)LoadImage(g_hInstance, MAKEINTRESOURCE(32710), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
GetObject(hbitmap, sizeof(BITMAP), &bitmap); 
//第二种方法:
  bitmap.bmWidth = 23;
  bitmap.bmHeight = 23;
  bitmap.bmBitsPixel = 32;
  bitmap.bmWidthBytes = (bitmap.bmWidth * bitmap.bmBitsPixel / 8 + 3) / 4 * 4;; 

  1.3BITMAP         结构体,得到位图中的
 

//位图资源IDB_BITMAP1
//BOOL LoadBitmap(LPCTSTR lpszRecourceName)
//BOOL LoadBitmap(UINT nIDResource); 
//函数中的lpszRecourceName不能为路径字符串。
//它指的是位图的ID是用字符串表示的。 
//IDB_BITMAP   BITMAP   "res\\background.bmp"   
//改成:Bitmap1   BITMAP   "res\background.bmp"
CBitmap   cbmp;   
cbmp.LoadBitmap("Bitmpa1");   
CDC   memdc;   
BITMAP   bm;   
cbmp.GetBitmap(&bm); //资源变结构体  
memdc.CreateCompatibleDC(pDC);   
memdc.SelectObject(&bmp);   
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&memdc,0,0,SRCCOPY); 

2.类型之间的互相转换

//1.CBitmap->BITMAP
CBitmap bitmap;
bitmap.LoadBitmapW(IDB_BITMAP1);
BITMAP bm;
bitmap.GetBitmap(&bm);
//2.CBitmap->HBITMAP
CBitmap bitmap;        
bitmap.LoadBitmapW(IDB_BITMAP1);
HBITMAP hBitmap = (HBITMAP)bitmap.m_hObject;
//3.BITMAP->HBITMAP
HBITMAP hBitmap;
pbm->GetHBITMAP(NULL, &hBitmap);
//4.BITMAP->CBitmap 
Bitmap* pBitmap = new Bitmap(width,height,PixelFormat24bppRGB);
HBITMAP hBitmap;
BITMAP bm;
pBitmap ->GetHBITMAP(NULL,&hBitmap);
CBitmap* bmp;
bmp.Attach(hBitmap);


 

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值