GetBitmapBits和GetDIBits区别

本文比较了Windows设备中GetBitmapBits和GetDIBits函数在获取位图信息时的区别,强调GetDIBits由于包含调色板,能确保在不同设备间兼容性,尤其是在处理低端显示设备时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Windows设备相关与设备无关位图解析 https://www.cnblogs.com/luofeiju/p/15839811.html

两个都可以通过位图句柄获得位图的信息部分,但是GetBitmapBits获取的位图信息换到一些设备中,就可能不能正常显示了,而GetDIBits获取的位图信息,即使换个设备,也一样可以正常显示,因为DIB有个调色板,所以可以创建16色和256色可以兼容低端显示设备

LONG GetBitmapBits(
  [in]  HBITMAP hbit,
  [in]  LONG    cb,
  [out] LPVOID  lpvBits
);

 通过观察函数的参数(位图句柄,拷贝字节数,拷贝到的目标内存地址),就能看出来GetBitmapBits就是只获取位图的数据部分,不会获取位图其他信息,第二个参数拷贝自己数需要我们自己去计算,可以通过GetObject(位图句柄,sizeof(BITMAP), 目标位图结构地址);这个API得到位图相关信息,通过里面的信息,就能得到cb的大小值是多少

int GetDIBits(
  [in]      HDC          hdc,
  [in]      HBITMAP      hbm,
  [in]      UINT         start,
  [in]      UINT         cLines,
  [out]     LPVOID       lpvBits,
  [in, out] LPBITMAPINFO lpbmi,
  [in]      UINT         usage
);

GetDIBits(设备DC,位图句柄,起始行数,要copy的行数,接收位图数据的缓冲区的指针,指向 BITMAPINFO 结构的指针,DIB_PAL_COLORS或DIB_RGB_COLORS) ,这个函数不止copy了位图的数据部分,还copy了位图的头信息部分以及调色板,得到的是DIB位图,因为是DIB(Device Independent Bitmap)位图,,所以调色板是必不可少的,有了调色板这样这个位图才能在低端设备中都能正常显示,这个函数使用时,需要调用两次,第一次当传入的lpvBits参数为NULL时,会将位图信息头写入到lpbmi中,然后第二次调用时,会根据lpbmi中的信息分配内存大小,然后将数据拷贝到lpvBits中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值