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
内的结构:
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
内的结构:
2.写在最后
2.1.测试用的位图
至于我用的位图, 440×479就是这一张啦, 药酱(博客图床自动把我的bmp转成png了)
2.2.一些参考
2.3.一些小提醒
- 使用
LoadImage
加载的位图要放在vc生成的exe目录下(Debug或者Release) - 如果使用
BitBlt
仍然不显示位图的话, 位图可以用mspaint另存为处理一下, 网上的bmp在线转换有的好像不是很靠谱
(完)