在做自己的GUI时,鼠标指针使用bmp图片。一开始32x32,太大了,改为16x16,一切OK。但后来感觉再改小点会不会更好,于是裁剪到10x16,一测出现问题了,鼠标变了。我怀疑是代码中width和height有还没更新的地方。于是全部使用全局变量的ms_w、ms_h来代替,再测试,还是一样。
怀疑是图片的问题,仍使用16x16的,一切依然OK。再切换为10x16,又是那样。于是,再裁剪为10x14,仍是那样的问题。
好吧,看看BMP图片的数据,看看哪里不对。
看属性:
哎,一算,不对啊,这么奇怪?
于是,百度了下BMP格式
http://baike.baidu.com/link?url=NNWmHtYqdmIaWdhWBt7pPpaKzPKLak-msmNoYrgzXPu6g_SVE6I9rmYOlxK5DmtiSS0dYa3EDG5PywoiqqjFgIQNXjsSqpHVR3Vnh2on6x3
位图一共有两种类型,即:设备相关位图(DDB)和设备无关位图(DIB)。我是用windows自带的画图截出来的,再保存为BMP,24bit是DIB类型,从底向上显示。
真彩色图(24位的BMP)就不需要调色板,在24位图中直接使用RGB。
1f8h = 504字节,数据是有的,再看,发现多的是最后两字节数据,同时可以看到有四行后面填充的并不是0x00,而是其他数据
(
0X7B 0X0C
0X31 0X2E
0X4B 0X4F
0X5C 0X4C
)
多了最后两字节0x00 0x00。
说明WINDOWS自身的画图软件也是那么不靠谱的!
不过我那个鼠标不正常显示是我忽略了windows的不足4的倍数时补为4的倍数。