图的存储及相互转换之c语言,用C语言实现bmp与pix相互转换.doc

用C语言实现bmp与pix相互转换

用C语言实现bmp与pix图像格式相互转换一.实验目的:pix图像是PCI软件使用格式,而bmp图像是常用格式,通过分析两者的逻辑结构和存储关系,实现格式的相互转换,方便使用各类图像。

二.实验原理:现在以100*100的两种图像为例,用C语言实现相互转换。Bmp图像格式由头文件和颜色信息两部分组成,其中bmp的头文件固定占54个字节,颜色信息的数据大小根据画面大小而定。用winHex打开不同的bmp图像,发现其每个像素是由3个字节构成,3个字节分别存储对应的蓝、绿、红三种颜色。颜色信息排列是从图像的左下角开始向右,再逐层向上记录的,终止于图像的右上角。Pix图像格式由头文件,颜色信息和尾文件组成,其中头文件固定占36352个字节,颜色信息的数据大小根据画面大小而定,尾文件固定占5824个字节。用winHex打开不同的pix图像,可以发现颜色是按蓝、绿、红三色逐个波段,逐个像素排列的。顺序是从左上角开始向右,再逐层向下记录的,终止于左下角。那么实现bmp转换pix就是要将bmp的颜色信息按其排列顺序读出来,再按pix的颜色信息排列的顺序写入,同时需要已有的模板pix的头文件和尾文件照搬写入新的pix中。同理,实现pix转换bmp就是要将pix的颜色信息按其排列顺序读出来,再按bmp的颜色信息排列的顺序写入。不同在于bmp只需要再加入头文件,将已有的模板bmp的头文件照搬写入新的bmp中。

三.实验步骤1.准备100*100的pix图像和100*100的bmp图像及模板

2. bmp转换pix编程如下:#includemain(){FILE *fp1,*fp2,*fp3;char ch,p[100][100][3];long i,j,k;fp1=fopen("E:\\pix\\1.bmp","rb");fp2=fopen("E:\\pix\\1.pix","rb");fp3=fopen("E:\\pix\\2.pix","wb");for(i=1;i<=36352;i=i++){ch=fgetc(fp2);fputc(ch,fp3);}fseek(fp1,54L,0);for(i=0;i<=99;i++){for(j=0;j<=99;j++){for(k=0;k<=2;k++){ch=fgetc(fp1);p[i][j][k]=ch;}}}for(k=0;k<=2;k++){for(i=0;i<=99;i++){for(j=0;j<=99;j++){ch=p[99-i][j][k];fputc(ch,fp3);}}}fseek(fp2,66352L,0);for(i=0;i<=5824;i++){ch=fgetc(fp2);fputc(ch,fp3);}fclose(fp1);fclose(fp2);fclose(fp3);printf("%s","ok");}3.运行程序,得到2.pix图像bmp格式 pix格式4.pix转换bmp编程如下:#includemain(){FILE *fp1,*fp2,*fp3;char ch,p[100][100][3];long i,j,k;fp1=fopen("E:\\pix\\a.pix","rb");fp2=fopen("E:\\pix\\a.bmp","rb");fp3=fopen("E:\\pix\\b.bmp","wb");for(i=1;i<=54;i=i++){ch=fgetc(fp2);fputc(ch,fp3);}fseek(fp1,36352L,0);for(k=0;k<=2;k++){for(i=0;i<=99;i++){for(j=0;j<=99;j++){ch=fgetc(fp1);p[99-i][j][k]=ch;}}}for(i=0;i<=99;i++){for(j=0;j<=99;j++){for(k=0;k<=2;k++){ch=p[i][j][k];fputc(ch,fp3);}}}fclose(fp1);fclose(fp2);fclose(fp3);printf("%s","ok");}5.运行程序,得到b.bmp图像pix格式 bmp格式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值