C语言编译中出现0xa1,《求助~~~》unknown character '0xa1'

回复 5楼 TonyDeng

/*****************

1.本函数的功能:实现图像的读取与输出,

文件为bmp文件,分为1位,4位,8位,16位,24位

2.函数的符号定义:fpin:指向读入文件的指针

fpout:指向读出文件的指针

******************/

#include

/*      #include

//直接引用Windows函数功能,直接引用出现了错误,那么我就自己定义好了      */

#include

/*    */

typedef unsigned short int WORD;    //定义函数代称,2个字节

typedef unsigned int DWORD;//定义函数代称,4个字节

typedef char BYTE;         //定义函数代称,1个字节

typedef struct tagBITMAPFILEHEADER  //文件信息头,一共14个字节

{

WORD bfType;

DWORD bfSize;

WORD bfReserved1;

WORD bfReserved2;

DWORD bfOffBits;

}BITMAPFILEHEADER;

typedef struct tagBITMAPINFOHEADER   //位图信息头,一共40个字节

{

DWORD biSize;             //bmiHeader 的结构的长度

DWORD biWidth;            //位图的宽度

DWORD biHeight;         //位图的高度

WORD  biPlanes;         //目标设备的位平面数,必须为1

WORD  biBitCount;        //每个像素的位数,必须是1(单色),4(16色),8(256色),或者24(真彩色)

DWORD biCompression;    //位图的压缩类型,必须是0(不压缩),1(BI-RLE8压缩类型)或者2(BI-RLE4压缩类型)

DWORD biSiZelmage;        //位图的大小,以字节为单位

DWORD biXPelsPerMeter;    //位图的水平分辩率,以每米多少像素为单位

DWORD biYPelsPerMeter;    //位图的垂直分辨率

DWORD biClrUsed;        //    位图中实际使用的颜色表中的颜色变址数

DWORD biClrImportant;   //位图中认为重要的颜色表中的颜色变址数

}BITMAPINFOHEADER;

typedef struct tagRGBQUAD //调色板信息,一共4个字节

{

BYTE rgbBlue;      // 取·0-255,

BYTE rgbGreen;

BYTE rgbRed;

BYTE rgbReserved;   //不代表任何意义,只是保留这个空间

}RGBQUAD;

/*结果验证,就算我自己定义函数,我的错误仍然存在,很奇怪。*/

void main()

{

BITMAPFILEHEADER fileheader;

BITMAPINFOHEADER infoheader;

RGBQUAD *palette;               //指向调色板的指针

char *img[5000];

int width,sizeofpalette;

void infile(FILE *fpin,BITMAPFILEHEADER fileheader,BITMAPINFOHEADER infoheader,RGBQUAD *palette,char *img[5000],int width,int sizeofpalette);

void outfile(FILE *fpout,BITMAPFILEHEADER fileheader,BITMAPINFOHEADER infoheader,RGBQUAD *palette,char *img[5000],int width,int sizeofpalette);

FILE *fpin,*fpout;

fpin=fopen("D:\\11.bmp","rb"); //在主函数中打开文件

fpout=fopen("D:\\23.bmp","wb");//打开另外一个文件,若是磁盘中存有这个文件,则读进并且覆盖这个磁盘,假如文件夹中没有这个文件,则创立一个新的文件名

if((fpin=fopen("D://11.bmp","rb"))==NULL)           //判断是否存在这个文件

printf("Sorry,we cannot find the file!\n");

infile(fpin,fileheader,infoheader,palette,img,width,sizeofpalette);   //调用读取函数

outfile(fpout,fileheader,infoheader,palette,img,width,sizeofpalette);//调用读出的函数

fclose(fpin);

fclose(fpout);

}

void infile(FILE *fpin,BITMAPFILEHEADER fileheader,BITMAPINFOHEADER infoheader,RGBQUAD *palette,char *img[5000],int width,int sizeofpalette)//读入图片的函数

{

unsigned int i;

fread(&fileheader,sizeof(BITMAPFILEHEADER),1,fpin);                      //读入文件信息头

fread(&infoheader,sizeof(BITMAPINFOHEADER),1,fpin);                    //读入位图信息头

if(infoheader.biBitCount<16)                       //假如16位以下的像素位数,需要调色板,调色板具有单色位、4色位、8色位、16色位、24色位,没有32色位

{

sizeofpalette=(int(pow(2,(infoheader.biBitCount))))*4;//调色板的大小,等于2的位数次幂,再乘以4

fread(palette,sizeofpalette,1,fpin);

}

/* 开始读入位图数据*/

width=infoheader.biWidth/(32/infoheader.biBitCount)+1;/*至少要读入的横像素的数目,因为一次需要读四个,1位的一次读取32个像素;4位的一次读取8个像素;8位一次读取4个像素;16为一次读取2个像素;32位一次读取1个像素。*/

for(i=0;i

fread(img[i],width,1,fpin);

}

void outfile(FILE *fpout,BITMAPFILEHEADER fileheader,BITMAPINFOHEADER infoheader,RGBQUAD *palette,char *img[5000],int width,int sizeofpalette)

{unsigned int i=0;

fwrite(&fileheader,sizeof(BITMAPFILEHEADER),1,fpout);

fwrite(&infoheader,sizeof(BITMAPINFOHEADER),1,fpout);

fwrite(palette,sizeofpalette,1,fpout);

for(i=0;i

fwrite(img[i],width,1,fpout);}

/*以上为全部的源代码*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值