Linux下BMP格式文件的保存问题
来源:互联网 发布:广州淘宝代运营诈骗 编辑:程序博客网 时间:2024/05/29 12:58
BMP格式文件主要由位图文件头、位图信息头、位图数据三部分组成,有时候还需考虑调色板的使用。本文该出了在利用 相机采集到图像信息的基础之上,将图像数据保存文BMP格式的图片。
在Linux下实际使用中,数据写入后只得到一副纯黑的图片,考虑之后觉得应该是图片数据并未写入,发现是Linux下字节对齐问题,在代码中添加如下一行即可。
首先创建两个结构,用于位图文件头和位图信息头数据的保存。
typedef unsigned char BYTE;typedef unsigned shortWORD;typedef unsigned long DWORD;typedef struct tagBITMAPFILEHEADER{ WORD bfType; //Linux此值为固定值,0x4d42 DWORD bfSize; //BMP文件的大小,包含三部分 DWORD bfReserved; //置0 DWORD bfOffBits; //文件起始位置到图像像素数据的字节偏移量 }BITMAPFILEHEADER;typedef struct tagBITMAPINFOHEADER{ DWORD biSize; //文件信息头的大小,40 DWORD biWidth; //图像宽度 DWORD biHeight; //图像高度 WORD biPlanes; //BMP存储RGB数据,总为1 WORD biBitCount; //图像像素位数,笔者RGB位数使用24 DWORD biCompression; //压缩 0:不压缩 1:RLE8 2:RLE4 DWORD biSizeImage; //4字节对齐的图像数据大小 DWORD biXPelsPerMeter; //水平分辨率 像素/米 DWORD biYPelsPerMeter; //垂直分辨率 像素/米 DWORD biClrUsed; //实际使用的调色板索引数,0:使用所有的调色板索引 DWORD biClrImportant; }BITMAPINFOHEADER;
笔者使用的文件头与信息头的数据:
//Set BITMAPINFOHEADERbi.biSize = 40;bi.biWidth = IMAGEWIDTH;bi.biHeight = IMAGEHEIGHT;bi.biPlanes = 1;bi.biBitCount = 24;bi.biCompression = 0;bi.biSizeImage = IMAGEWIDTH*IMAGEHEIGHT*3;bi.biXPelsPerMeter = 0;bi.biYPelsPerMeter = 0;bi.biClrUsed = 0;bi.biClrImportant = 0;//Set BITMAPFILEHEADERbf.bfType = 0x4d42;bf.bfSize = 54 + bi.biSizeImage;bf.bfReserved = 0;bf.bfOffBits = 54;
写入文件的顺序:
fwrite(&bf,14,1,fp); //写入文件头fwrite(&bi,40,1,fp); //写入信息头fwrite(frame_buffer,bi.biSizeImage,1,fp); //写入图像数据
在Linux下实际使用中,数据写入后只得到一副纯黑的图片,考虑之后觉得应该是图片数据并未写入,发现是Linux下字节对齐问题,在代码中添加如下一行即可。
#pragma pack(1)
由于是第一次在Linux下使用这个功能,欢迎大家加以指正。
阅读全文
0 0
- Linux下BMP格式文件的保存问题
- 关于Linux下.bin格式文件的安装
- Linux下打开.chm格式文件的解决方案
- bmp格式文件的操作类实现
- 多种编码格式文件的保存
- MFC下256色BMP位图的保存
- 将windows下的GBK编码格式文件转化为Linux下UTF-8编码格式文件
- linux下access的mdb格式文件的导入
- linux下读取bmp
- linux下打开chm格式文件
- Linux下历史命令保存、默认值修改的问题
- 保存bmp图片的程序
- linux下安装run格式文件的nvdia显卡驱动
- 在linux下rar格式文件的解压和打包
- linux下我的chm格式文件阅读解决方案
- Linux下 tar.xz格式文件的解压方法
- LINUX下tar.xz格式文件的解压方法
- 嵌入式 Linux下tar.xz格式文件的解压方法
- 数值的整数次方
- 安卓的模板设计模式
- 4.Less混合(mixins)
- mysql数据库中decimal类型详解
- 用系统用户登录Oracle
- Linux下BMP格式文件的保存问题
- 深入分析HTTP状态码502(nginx+php-fpm)
- Android-NDK-之Hello-World
- 数据结构与算法总结
- http://www.jianshu.com/p/562387a85eeb
- MySQL学习(五)【MySQL运维实践】
- oracle数据库用户删除及表空间删除
- 注意!腾讯杀入无人车战场:原型车已经搞定,系统正在内测
- Kotlin 无法直接使用xml中的ID