夏树的C语言篇 – 获取Bmp位图的宽高

0.写在前面

最近才开始研究C语言控制台贴图的内容(同学格斗游戏都快做完啦?!), 之前做课设的时候一直感觉模模糊糊的. 然后想自己封装一套用来贴图的库, 类似于EasyX? 然后就遇到了需要获取Bmp位图宽高的问题, 搜了下发现讨论区提到使用GetObject或者GetBitmapDimensionEx可以实现, 但是在实际使用过程中还是存在一定的区别的。

1.实现方法

1.1.GetObject

使用GetObject函数可以获得bmp图像的实际宽高.
方法如下(需要引入头文件windows.h):

BITMAP bitmap;       //用于存储指定图形对象的信息
HBITMAP hBitmapImag; //用于存储从LoadImage函数获取的HBITMAP数据

GetObject (hBitmapImag,sizeof(BITMAP),&bitmap);

bitmap.bmWidth;     //Bmp图像宽度: 440
bitmap.bmHeight;    //Bmp图像高度: 479

BITMAP内的结构:

VC_Debug_BITMAP.jpg

1.2.GetBitmapDimensionEx

刚开始我也是使用GetBitmapDimensionEx, 因为很多讨论区只提到了GetBitmapDimensionEx这个函数, 于是我就会直接下意识地直接使用它(这是容易陷入误区的, 以为只需要这一个函数即可). 但是实际上, 在调用GetBitmapDimensionEx函数之前, 需要先使用SetBitmapDimensionEx这个函数为位图设置宽高.

也就是说GetBitmapDimensionEx只能返回使用SetBitmapDimensionEx所设置的位图宽高.

方法如下(需要引入头文件windows.h):

HBITMAP hBitmapImag; //用于存储从LoadImage函数获取的HBITMAP数据
struct tagSIZE size; //用于存放所设置的bmp位图宽高

SetBitmapDimensionEx(hBitmapImag,440,479,&Size);   //设置位图宽度440高度479
GetBitmapDimensionEx(hBitmapImag,&Size);

size.cx;   //设置的Bmp图像宽度: 440
size.cy;   //设置的Bmp图像高度: 479

struct tagSIZE内的结构:
VC_Debug_sturct_tagSIZE.jpg

2.写在最后

2.1.测试用的位图

至于我用的位图, 440×479就是这一张啦, 药酱(博客图床自动把我的bmp转成png了)
liubo_bmp.png

2.2.一些参考

2.3.一些小提醒

  • 使用LoadImage加载的位图要放在vc生成的exe目录下(Debug或者Release)
  • 如果使用BitBlt仍然不显示位图的话, 位图可以用mspaint另存为处理一下, 网上的bmp在线转换有的好像不是很靠谱

(完)

发布者

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注