RAW文件是位图的图像数据,根据不同的BMP格式它的内容和使用场合都有不同。比如在嵌入式系统中,显示LOGO要使用BMP图,只需要往映射地址放入像素的RGB数据即可实现。以下举一个DOS程序实例,把16位BMP转成十六进制RAW数据。

(1)主函数。因为main可以利用argv带参数,可处理同一路径下的具体文件。

int main(int argc, char *argv[])

{

FILE *fp_s=NULL;

BITMAPFILEHEADER biFileHeader;

BITMAPINFOHEADER biInfoHeader;

PBITMAPFILEHEADER pbiFileHeader= &biFileHeader;

PBITMAPINFOHEADER pbiInfoHeader= &biInfoHeader;

if(!(fp_s=fopen(argv[1],"r+b")))//以二进制可读方式打开流文件

{

printf("打开文件不成功!");

return 1;

}

//读取文件头

if(!(GetBitmapHeader(fp_s, pbiFileHeader, pbiInfoHeader)))

{

printf("读取文件头不成功!");

return 1;

}

//用读取的数据头生成文件

if(!(GenerateIFile(pbiFileHeader,pbiInfoHeader,fp_s, argv)))

{

printf("生成i文件失败!");

return 1;

}

if(fclose(fp_s)==EOF)

printf("关闭失败!");

return 0;

}

(2)获取头文件信息函数

int GetBitmapHeader(FILE *fp, BITMAPFILEHEADER *bfhp, BITMAPINFOHEADER *bihp)

{

//设置文件读写位置为开头

if((fseek(fp,0,SEEK_SET)==-1))

{

puts("GetBitmapHeader定位失败!");

return 0;

}

//读取fileheader

if(!(fread(bfhp,sizeof(BITMAPFILEHEADER),1,fp)))

{

puts("GetBitmapHeader读取fileheader失败!");

return 0;

}

//读取fileheader后的位置

long i;

if((i=ftell(fp))==-1L)

{

puts("GetBitmapHeader读取文件指针位置失败!");

return 0;

}

else

printf("当前位置为:%d\n",i);

//

if(!(fread(bihp, sizeof(BITMAPINFOHEADER), 1, fp)))

{

puts("读取infoheader失败!");

return 0;

}

if((i=ftell(fp))==-1L)

{

puts("读取文件指针位置失败!");

return 0;

}

else

printf("当前位置为:%d\n",i);

return 1;

}

(3)生成raw文本文件

int GenerateIFile(PBITMAPFILEHEADER bfhp, PBITMAPINFOHEADER bihp, FILE *fp_s, char **stringp)

{

//检查是倒序文件还是正序文件

if( bihp->biHeight > 0 )

puts("GenerateIFile该文件为倒序文件!");

else

{

puts("GenerateIFile该文件为正序文件!");

return 0;

}

//检查是否压缩,只处理BI_BITFIELDS的情况

if( bihp->biCompression == BI_BITFIELDS )//#define BI_BITFIELDS 3

puts("GenerateIFile该文件为BI_BITFIELDS压缩格式!");

else

{

printf("BI_BITFIELDS=%d\n", bihp->biCompression);

puts("GenerateIFile该文件不为BI_BITFIELDS压缩格式!");

return 0;

}

//检查文件类型

if(bfhp->bfType==19778)//'M' 'B'

puts("该文件为bmp格式!");

else

{

puts("该文件不为bmp格式!");

return 0;

}

//检查像素位数

if(bihp->biBitCount==16)

puts("该bmp文件为16位!");

else

{

puts("该bmp文件不为16位!");

return 0;

}

printf("the start of the image area is %d\n",bfhp->bfOffBits);

printf("the size of the image area is %d\n",bihp->biSizeImage);

printf("the height of the image is %d\n", bihp->biHeight);

printf("the width of the image is %d\n", bihp->biWidth);

//开辟一个数据缓冲区,存储image区的数据

short *pimage=NULL;

pimage=(short *)malloc((bihp->biHeight * bihp->biWidth)*2);

if(pimage== NULL)

{

printf("分配缓冲区失败!");

return 0;

}

fseek(fp_s, bfhp->bfOffBits, SEEK_SET);//定位文件指针到数据区

printf(" %d\n",ftell(fp_s));

if(!(fread(pimage, 1, bihp->biHeight * bihp->biWidth*2, fp_s))) //填充缓冲区

{

printf("填充数据缓存失败!");

return 0;

}

//重列顺序并且生成文件

if(!(RerangeData(bfhp, bihp, pimage, stringp)))

{

printf("RerangeData函数失败!");

return 0;

}

//释放缓冲区

free(pimage);

return 1;

}

未完待续。。。。

c语言读取bmp图片另存为raw,BMP之二:转成RAW文件及应用相关推荐

  1. C# bmp图片另存为位图 位深度1

    用微软自带的画图,打开一个已经存在的单色PNG图片文件,然后复制图像粘贴上去,做点反色或其他处理再保存,可以得到黑白单色PNG图片:但是,如果有很多黑底白字的图片要想改成白纸黑字的单色PNG格式保存这 ...

  2. php 生成bmp图片,[GD]生成bmp格式的图片(imagebmp)

    GD库里没有生成bmp图片的函数,所以自己写了一个,这个函数尚有一个压缩算法没有写,不过已经够用了.需要的同学可以看看. int imagebmp ( resource image [, string ...

  3. c语言读取pnm图片,ppm图像相关 - osc_p1rj1z8j的个人空间 - OSCHINA - 中文开源技术交流社区...

    PPM图像格式介绍 直接拿具体的数据来说明是最直接的,使用ue打开ppm文件,采用的都是十六进制asc码表示的,这里要注意地址00000000h中的最后一个字母是始终不变的,这原来没注意晕了我好久,第 ...

  4. matlab产生bmp图片,matlab 生成.bmp格式的文件

    生成.bmp格式的文件 .bmp格式的图片是未压缩的图片,相比于.raw格式,需要加上头文件.下面以大小为M*N的图片为例,说明头文件格式和内容. M = 128; N = 128; % 构造头文件 ...

  5. 用C语言读取png图片十六进制,C/C++ 二进制读写 png 文件

    #include #include usingnamespacestd; typedefunsignedcharbyte; /* class PngMsg { private : unsigned c ...

  6. c语言 读取摄像头图片分辨颜色,opencv摄像头捕获识别颜色

    本文实例为大家分享了opencv摄像头捕获识别颜色的具体代码,供大家参考,具体内容如下 #include "highgui.h" #include "iostream&q ...

  7. 使用C语言读取.txt文本数据构建链表时fscanf用法不当以及文件编码格式不对导致读取失败

    问题描述 做C语言课设的时候想要通过读取文本的方式构建一个链表. 结构体 typedef struct grade {char subject[15];//科目char startTime[10];/ ...

  8. 用C语言读取.txt文本,并保存在二维数组中

    将a.txt里面的内容如下: 在C语言里面保存为数组a[6][3]. 代码如下: #include<stdio.h> #include<stdlib.h> int main() ...

  9. 【数字图像处理】BMP图片的读取显示存储(C语言实现)

    (一)背景介绍 这段时间接到了一个新活,是关于图像处理的一个探地摄像头的项目.所以也差不多是时候开始学习一下数字图像处理的知识了.本来我们的方案是直接移植opencv,编译一下以后其他就基本啥都不用管 ...

最新文章

  1. AKOJ-2037-出行方案
  2. feign返回null_109、Feign的服务降级和Turbine
  3. linux轻量级进程LWP
  4. gentoo rt-thread scons --menuconfig libs/lxdialog/util.o: undefined reference to symbol 'nodelay'
  5. 1/5 MySQL入门总结:下载安装
  6. 微服务组件记事本:本地搭建Skywalking
  7. C#使用Xamarin开发可移植移动应用(3.Xamarin.Views控件)附源码
  8. linux expr格式,计算2-expr命令举例
  9. java小程序开发平台,隔壁都馋哭了
  10. 成功必读本:培养人脉的106个技巧
  11. 面试常见java异常题_Java异常面试题(含答案)
  12. ODBC、OLEDB、ADO的区别和联系
  13. IB客座主编(三):西门子(中国)有限公司工业业务领域楼宇科技集团杜明轩(Christophe de Maistre)先生...
  14. RuntimeError: all elements of input should be between 0 and 1
  15. 深度技术 Windows 7 SP1 x64 极速装机版 V2013.05
  16. poi 同时 冻结第一行和第一列
  17. 如何从Word,Excel和PowerPoint文档中提取图像,文本和嵌入式文件
  18. SpringBoot电商项目之购物车下单(沙箱支付)
  19. 判断一个多边形的凸凹性
  20. Git实战(五)| 让工作更高效,Git的分支管理

热门文章

  1. 使用turtle来画奥运五环使用turtle进行图形化的程序设计来绘制自己想要的图形
  2. html左右超出显示滚动条,div内容宽度超出边界后怎样设置为左右滑动,而且不显示滚动条?...
  3. LightWAN场景以及方案说明
  4. 理解DSCP PHB AF DF(转载)
  5. 《计算机工程与应用》投稿详解
  6. Shareaza协议分析
  7. Cisco ASA(防火墙)基本配置
  8. Visual Studio 2019无法安装
  9. asp.net超市管理系统(源码+数据库)
  10. finereport使用java_finereport和java