HBITMAP
BITMAP
int bmType;//必须是BM
int bmWidth;//指定位图的宽度(以象素为单位)
int bmHeight;//指定位图的高度(以象素为单位)。
int bmWidthBytes;//一行几个字节,4位对齐
BYTE bmPlanes;//指定目标设备的位面数
BYTE bmBitsPixel;//指定每个象素的位数
LPVOID bmBits;//指向图象数据的指针
} BITMAP;
注意 bmBits是自己先前设置的 具体看下面复制的:
CBitmap::CreateBitmapIndirect函数的功能是用一个BITMAP结构体重的高度、宽度和位模式(如果指定了一个的话)来初始化一个位图。调用该函数时,用户可以设置bmBits字段为NULL或者设为像素位数据的地址(用以初始化该位图)。
复制自:http://bbs.csdn.net/topics/10310605
所以如果我们生成位图的时候没有设置bmBits ,之后通过下面的 方法得到的bm结构中的bmBits是NULL 是无效的指针
这时候我们可以通过GetDIBits获得bmp图像的DIB格式的数据. 我们传入的第6个参数 即LPBITMAPINFO 结构体会接收返回的位图信息 比如位图数据大小 具体见下面BITMAPINFOHEADER的解释
windows不允许直接对用户对象操作,其操作得通过句柄来进行。
例如:
通过HBITMAP取得BITMAP;
以下不是转载 而是个人理解 不对请指正:注意上面得到的bm是hBmp的信息 它表示的是hBmp的固有属性 假如它是与你的屏慕兼容的bmp 那么hBmp的信息记录的是屏幕位图的信息 不会改变。
GetDIBits 当你用位图去获取信息时,获取信息的位数 什么的 跟你传入的BITMAPINFO结构有关系 假如这个bmp已经被选入屏幕DC 你要获得屏幕的8位图像(256色) 而一般你的屏幕是32位 那么bm中存放的 bmBitsPixel是32 而你想到8位的话 就 需要在BITMAPINFO结构中设置 然后给GetDIBits作参数!