c语言读取位图编程

c语言读取位图编程,第1张

我也遇到过类似的问题,位图数据读取到内存,然后在保存的文件中。

新位图文件,虽然能够显示但是图片内容中存在大量错误。

后来发现问题的关键在于

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图像的信息单元


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11908540.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存