昨天一下午都在折腾这个bitmap文件,卡在了一个死角上。
想做的事情是用很多栅格点的数据生成灰度图像。
先把这些数据标准化到0-255之间;然后生成file文件,填写bitmap文件头,填写标准化后的栅格数据。
需要注意的有两点:
1,数据类型的转换,我是从float转为unsigned char,然后转为byte,因为很少接触byte类型,查了以后才知道byte和unsigned char其实是一样的。
2,bitmap文件头的填写。
可参考任一一个讲解bitmap文件结构的文档。http://lhbyron.bokee.com/652956.html
我做完这两个步骤,却发现生成图像失败。当时考虑可能的原因有:1,数据类型转换中出了问题;2,bitmap文件格式的问题。
测试了一下可以排除第一个可能。然后看第二种情况,我用ultraedit软件直接把生成的错误的bitmap文件打开,当然都是16进制的数据。然后我把这些16进制的数据跟bitmap文件头的格式一位一位的比对,最后发现错误的原因在于Bitmap Data Size设置错了,bitmap文件要求这个值必须是4的整数倍。改成4的整数倍以后,问题就解决了。看来位图像素的总数必须是4的整数倍。
总结了一下,还是自己太粗心,没有仔细地看bitmap文件结构。另外,UltraEdit这个软件还蛮好用的。