CreateCompatibleBitmap建的HBITMAP有BITMAPINFOHEADER和调色板吗?

冰壶2013 2010-02-13 02:22:57
下面是拷屏程序的部分,这样得到的HBITMAP有BITMAPINFOHEADER和调色板吗?
还是只有数据?每像素是只有RGB值吗?或者像下面的结构有保留字节?
typedef struct tagRGBQUAD {
BYTE rgbBlue; //该颜色的蓝色分量。
BYTE rgbGreen; .....
BYTE rgbRed; .....
BYTE rgbReserved; //保留
} RGBQUAD;





HBITMAP hBitmap;

hScrdc=CreateDC("DISPLAY",NULL,NULL,NULL);

hMemdc=CreateCompatibleDC(hScrdc);

hBitmap = CreateCompatibleBitmap(hScrdc, nWidth, nHeight);

SelectObject(hMemdc, hBitmap);
BitBlt(hMemdc,0, 0, nWidth, nHeight, hScrdc, nX, nY, SRCCOPY);
...全文
136 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
会飞的老鱼 2010-02-14
  • 打赏
  • 举报
回复
你上面代码得到的BITMAP对象本身是不含BITMAPINFOHEADER和调色板的,但它有一个BITMAP结构,含有该位图对象的一些基本信息,比如位图大小,位深度和位面数等。可以由GetBitmap函数来获取这一结构信息,至于调色板,用的是系统默认的调色板或用户设置的当前调色板。
cnzdgs 2010-02-14
  • 打赏
  • 举报
回复
BitBlt是复制图象,并不是获得图象数据,你可以在BitBlt之后,再用GetDIBits获取图象数据及调色板。在调用这个函数时需要自己初始化BITMAPINFOHEADER中的长、宽、大小、颜色位数、位面成员。
corn8888 2010-02-14
  • 打赏
  • 举报
回复
up................................
norsd 2010-02-13
  • 打赏
  • 举报
回复
BITMAP::bmBitsPixel 这个判断几位.
前面写错了.
norsd 2010-02-13
  • 打赏
  • 举报
回复
你看到的保留字节其实是 Alpha.

从你的源代码看,你想获得屏幕的图像,这样得到的Bitmap应该是32位的.

详细看这里:
http://msdn.microsoft.com/en-us/library/dd183402(VS.85).aspx

p.s:
CreateCompatibleBitmap 是根据hdc,给你不同的bitmap ,
要确定位数,调用:
BITMAP stBitmap;
GetObject( hBitmap ,sizeof(BITMAP),&stBitmap );
然后判断stBitmap里面的bmpheader.biBitCount .

19,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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