
新位图文件,虽然能够显示但是图片内容中存在大量错误。
后来发现问题的关键在于
fopen(bmpname,"rb")
注意rb标志,不管是只读标志还是只写标志,或者读写标志后面要加+。
也就是rb+
不加+的标志是针对的文本读写的。
加+的标志是针对二进制数据读写的。
而位图文件是一种二进制数据。
对于一个24位色的图,你直接就拿int(32位机器,长度32位)型二维数组存就行了。肯定能存这个24位数,没必要把颜色分开存。如果分开存你就用下面的结构体数组的方法吧。建议参考,十分方便实用。RGB24使用24位来表示一个像素,RGB分量都用8位表示,取值范围为0-255。注意在内存中RGB各分量的排列顺序为:BGR BGR BGR…。通常可以使用RGBTRIPLE数据结构来 *** 作一个像素,它的定义为:
typedef struct tagRGBTRIPLE
{BYTE rgbtBlue// 蓝色分量
BYTE rgbtGreen// 绿色分量
BYTE rgbtRed// 红色分量
} RGBTRIPLE
你没有把文件的内容读进结构体里面,当然结果不可预料而且,如果你直接fread(&bmfHeader, sizeof(bmfHeader), 1, fp)也可能会出错,因为编译器在编译结构体的时候,为了加快访问,会进行结构体的对齐 *** 作。
所以你要逐一字段地读取bmp图像的信息单元
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)