如何从HBITMAP中获取BITMAP.bmWidth ...?

ta 2000-06-20 01:30:00
Good afternoon Sir
I want to copy bitmap from one DC to another by using bltbit function in Visual C++,
so I need the values are the bitmap.bmWidth and the Bitmap.bmHeight.
I have HBitmap that windows says it is the handle.
how can I get the bitmap informations from the Hbitmap?

thank you for looking and try to tell me answer.
sincerely!
...全文
162 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hydsoft 2001-08-06
  • 打赏
  • 举报
回复
to ta(提艾),你是外国人吗?
ta 2000-06-20
  • 打赏
  • 举报
回复
Just a moment, I'd try it now!
thank you much.
LJN 2000-06-20
  • 打赏
  • 举报
回复
CBitmap cb;
HBITMAP hb;
BITMAP b;

cb.Attach(hb);
cb.GetBitmap(&b);
b.bmWidth is you can use now.
CPaintDC dc(this); CWnd * pWnd = dc.GetWindow(); CWnd * item1; item1=this->GetDlgItem(IDC_STATIC1); CRect * rect=new CRect; item1->GetWindowRect(rect); POINT a,b; a=rect->TopLeft(); b=rect->BottomRight(); ::ScreenToClient(this->m_hWnd,&a); ::ScreenToClient(this->m_hWnd,&b); CDC memDC; CBitmap cBitmap; BITMAP bitmap; cBitmap.LoadBitmap(IDB_BITMAP2); //通过资源标识加载图片 // HBITMAP hbmp=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),"F:\\MFC\\duilian2\\res\\下联.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); //通过文件路径加载图片 // cBitmap.Attach(hbmp); cBitmap.GetBitmap(&bitmap); maxh=bitmap.bmHeight; memDC.CreateCompatibleDC(&dc); memDC.SelectObject(&cBitmap); dc.BitBlt(a.x,a.y,bitmap.bmWidth,bitmap.bmHeight,&memDC,0,0,SRCCOPY); //////////////////////////////////////////////////////////////////////////// CRgn rgn,temprgn; rgn.CreateRectRgn(a.x,a.y,a.x+bitmap.bmWidth+5,a.y+h+4); item1=this->GetDlgItem(IDC_STATIC2); item1->GetWindowRect(rect); a=rect->TopLeft(); b=rect->BottomRight(); ::ScreenToClient(this->m_hWnd,&a); ::ScreenToClient(this->m_hWnd,&b); cBitmap.DeleteObject(); cBitmap.LoadBitmap(IDB_BITMAP1); cBitmap.GetBitmap(&bitmap); // memDC.CreateCompatibleDC(&dc); memDC.SelectObject(&cBitmap); dc.BitBlt(a.x-1,a.y-2,bitmap.bmWidth,bitmap.bmHeight,&memDC,0,0,SRCCOPY); temprgn.CreateRectRgn(a.x,a.y,a.x+bitmap.bmWidth+4,a.y+h+4); rgn.CombineRgn(&rgn,&temprgn,RGN_OR); /////////////////////////////////////////////////////////////////////////////////////// item1=this->GetDlgItem(IDC_STATIC3); item1->GetWindowRect(rect); a=rect->TopLeft(); b=rect->BottomRight(); ::ScreenToClient(this->m_hWnd,&a); ::ScreenToClient(this->m_hWnd,&b); cBitmap.DeleteObject(); cBitmap.LoadBitmap(IDB_BITMAP3); cBitmap.GetBitmap(&bitmap); maxw=bitmap.bmWidth; // memDC.CreateCompatibleDC(&dc); memDC.SelectObject(&cBitmap); dc.BitBlt(b.x-2-bitmap.bmWidth,a.y-2,bitmap.bmWidth,bitmap.bmHeight,&memDC,0,0,SRCCOPY); temprgn.DeleteObject(); temprgn.CreateRectRgn(b.x-w,a.y,b.x,a.y+bitmap.bmHeight); rgn.CombineRgn(&rgn,&temprgn,RGN_OR); /////////////////////////////////////////////////////////////////////////////// pWnd->SetWindowRgn(rgn,true); // pWnd->SetForegroundWindow(); rgn.DeleteObject(); temprgn.DeleteObject(); SetTimer(0,15,NULL); //CDialog::OnPaint();
Snapshot526控件 授权后抓拍到的图片以时间为基准自动命令,未授权再无法抓拍图片。 保存的图片格式为bmp格式。 包含包“Snapshot526.h” 并在stdafx.h或调用的模块加入 #pragma comment(lib, "Camera526.lib") 然后在操作开始摄像头抓拍操作事件 CSnapshot526 snapshot; CString strFileName=L"",strFilePath; snapshot.SetGrantUserName(L"用户名"); //设置授权用户 snapshot.SetGrantUserKey(L"授权号"); //设置授权号 snapshot.SetCameraWindowSize(520,460); //设置视频窗口大小 snapshot.SetSaveImagePath(L"debug"); //设置抓拍图片保存路径 if(snapshot.ShowCameraDlg()) { strFileName = snapshot.GetPhotoFileName(); //获取抓拍图片文件名 SetDlgItemText(IDC_STNAME,strFileName); strFilePath = snapshot.GetPhotoFilePath(); //获取图片路径 if(!strFilePath.IsEmpty()) { //显示抓拍到的图片 HDC hSrcDC; HDC hDesDC; HBITMAP hBitmap; BITMAP bm; CRect rect; Sleep(100); hDesDC = m_stPicture.GetDC()->m_hDC; hSrcDC = CreateCompatibleDC(hDesDC); hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(), strFilePath, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION); //m_stPicture.SetBitmap(hBitmap); GetObject(hBitmap, sizeof(BITMAP), &bm); SelectObject(hSrcDC, hBitmap); m_stPicture.GetClientRect(&rect); ::SetStretchBltMode(hDesDC, COLORONCOLOR); ::StretchBlt(hDesDC, rect.left, rect.top, rect.right, rect.bottom, hSrcDC, 0, 0, bm.bmWidth, bm.bmHeight,+SRCCOPY); m_stPicture.InvalidateRect(rect); } } 注意,需要把文件Snapshot526.h拷到工程并加入,另需要Camera526.dll和Camera526.lib文件。 具体查看示例
////绘制底面路径imagePath 和 相框路径framePicPath void PaintFramePicture(HDC hDC,RECT rc,CString imagePath,CString framePicPath) { CDC *pDC=new CDC; pDC->Attach(hDC); CString bmpFile; HBITMAP hFgBmp; //画顶层透明位图 CDC DCImage, DCMask; CBitmap Bmp2; //Bmp2.LoadBitmap(IDB_BITMAP2); bmpFile=framePicPath; ///表层框架,相框 hFgBmp = (HBITMAP) LoadImage(NULL,bmpFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION); Bmp2.Attach(hFgBmp); BITMAP bm; Bmp2.GetBitmap(&bm); int nWidth=bm.bmWidth,nHeight=bm.bmHeight; bmpFile=imagePath;//画底层位图//底层内容 CBitmap Bmp1; hFgBmp = (HBITMAP) LoadImage(NULL,bmpFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION); Bmp1.Attach(hFgBmp); CDC memDC; memDC.CreateCompatibleDC(pDC); memDC.SelectObject(&Bmp1); pDC->BitBlt(0,0,nWidth,nHeight,&memDC,0,0,SRCCOPY); DCImage.CreateCompatibleDC(pDC); DCMask.CreateCompatibleDC(pDC); //把图像装入image DC DCImage.SelectObject(&Bmp2); //为“掩码”位图创建一个单色bitmap CBitmap BmpMask; //把mask位图装入mask DC BmpMask.CreateBitmap(nWidth, nHeight, 1, 1, NULL); //用透明色创建“掩码”位图 DCMask.SelectObject(&BmpMask); //设置透明色 DCImage.SetBkColor(RGB(0,0,0)); DCMask.BitBlt(0, 0, nWidth, nHeight, &DCImage, 0, 0, SRCCOPY); pDC->BitBlt(0,0, nWidth, nHeight, &DCImage, 0, 0, SRCINVERT); pDC->BitBlt(0,0, nWidth, nHeight, &DCMask, 0, 0, SRCAND); pDC->BitBlt(0,0, nWidth, nHeight, &DCImage, 0, 0, SRCINVERT); delete pDC; }

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧