怎么样获得HBITMAP句柄的位图的数据流信息

tjshif 2006-06-09 07:22:54
怎么样获得句柄HBITMAP的位图数据流信息;代码如下:

CRect Rect;
::GetWindowRect(hwnd,Rect);
HDC hSourceDC = ::GetDC(hwnd);
HDC hdc = ::CreateCompatibleDC(hSourceDC);

HBITMAP hCaptureBitmap = ::CreateCompatibleBitmap(hSourceDC, Rect.Width(), Rect.Height());
::BitBlt(hdc,0,0,Rect.Width(),Rect.Height(),hSourceDC,0,0,SRCCOPY);

怎么样获得hCaptureBitmap的位图数据流呢
我采用
BITMAP bm;
::GetObject(hCaptureBitmap,sizeof(bm),(LPVOID)&bm);
可是bm的bmBits为NULL
各位有什么办法嘛
...全文
342 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leeu 2006-08-01
  • 打赏
  • 举报
回复
兄弟我综合你们的, 搞定了.谢谢


CFileDialog dlg(true,_T("BMP"),_T("bmp"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("*.bmp|*.bmp|*.*|*.*|"));

if (dlg.DoModal()!=IDOK)
return;
CString ss=dlg.GetPathName();
//m_bmp.LoadBitmap(ss);
hBmp=(HBITMAP)LoadImage(AfxGetInstanceHandle(),ss,
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

CBitmap *pBmp=CBitmap::FromHandle(hBmp);
BITMAP bm;
::GetObject(hBmp,sizeof(bm),(LPVOID)&bm);
m_bmWidth=bm.bmWidth;
m_bmHeight=bm.bmHeight;
bobob 2006-06-10
  • 打赏
  • 举报
回复
int GetObject(
HGDIOBJ hgdiobj, // handle to graphics object
int cbBuffer, // size of buffer for object information
LPVOID lpvObject // buffer for object information
);


If hgdiobj is a handle to a bitmap created by calling CreateDIBSection, and the specified buffer is large enough, the GetObject function returns a DIBSECTION structure. In addition, the bmBits member of the BITMAP structure contained within the DIBSECTION will contain a pointer to the bitmap's bit values.

If hgdiobj is a handle to a bitmap created by any other means, GetObject returns only the width, height, and color format information of the bitmap. You can obtain the bitmap's bit values by calling the GetDIBits or GetBitmapBits function.

tjshif 2006-06-10
  • 打赏
  • 举报
回复
又没人回答了,唉,这的人也太。。。
jackwuwei 2006-06-10
  • 打赏
  • 举报
回复
BOOL SaveBitmap(HDC hDC,HBITMAP hBitmap,CString szPath)
{
FILE * fp= NULL;
fp = fopen(szPath.GetBuffer(1),"wb");
if(fp == NULL)
return false;

BITMAP Bm;
BITMAPINFO BitInfo;
ZeroMemory(&BitInfo, sizeof(BITMAPINFO));
BitInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
BitInfo.bmiHeader.biBitCount = 0;

if(!::GetDIBits(hDC, hBitmap, 0, 0, NULL, &BitInfo, DIB_RGB_COLORS))
return (false);

Bm.bmHeight = BitInfo.bmiHeader.biHeight;
Bm.bmWidth = BitInfo.bmiHeader.biWidth;

BITMAPFILEHEADER BmHdr;

BmHdr.bfType = 0x4d42; // 'BM' WINDOWS_BITMAP_SIGNATURE
BmHdr.bfSize = (((3 * Bm.bmWidth + 3) & ~3) * Bm.bmHeight)
+ sizeof(BITMAPFILEHEADER)
+ sizeof(BITMAPINFOHEADER);
BmHdr.bfReserved1 = BmHdr.bfReserved2 = 0;
BmHdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER)
+ sizeof(BITMAPINFOHEADER);

BitInfo.bmiHeader.biCompression = 0;
// Writing Bitmap File Header ////
fwrite(&BmHdr,sizeof(BITMAPFILEHEADER),1,fp);

fwrite(&BitInfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp);

BYTE *pData = new BYTE[BitInfo.bmiHeader.biSizeImage + 5];
if(!::GetDIBits(hDC, hBitmap, 0, Bm.bmHeight,
pData, &BitInfo, DIB_RGB_COLORS))
return (false);
if(pData != NULL)
fwrite(pData,1,BitInfo.bmiHeader.biSizeImage,fp);

fclose(fp);
delete (pData);

return (true);
}
Snow_Ice11111 2006-06-10
  • 打赏
  • 举报
回复
又没人回答了,唉,这的人也太。。。
--------------------------------------------------------------------
我不知道楼主以前在什么论坛上提问的,这里的人气太旺,贴子沉得太快,一两个小时后就到第二页了,大家就懒得翻了,回的人也少了,所以你希望有更多人关注的话可以隔段时间自己顶一下,一点点建议!
Snow_Ice11111 2006-06-10
  • 打赏
  • 举报
回复
不想Copy内存中数据的话,就按一楼WecanHuang(曾阿牛)朋友的方法,bmp文件格式看这里:
http://community.csdn.net/Expert/topic/4614/4614713.xml?temp=9.312075E-02
希望能帮到你!
tjshif 2006-06-09
  • 打赏
  • 举报
回复
GetBitmapBits会进行一次内存拷贝,可以避免马
Snow_Ice11111 2006-06-09
  • 打赏
  • 举报
回复
先把HBITMAP用CBitmap::FromHandle转为CBitmap*,再用CBitmap::GetBitmapBits获取。
WecanHuang 2006-06-09
  • 打赏
  • 举报
回复
把结构头去掉就是位图的实际信息了

16,472

社区成员

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

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

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