标题:《求助~~~》unknown character '0xa1'
只看楼主
valerychen
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2015-3-17
结帖率:66.67%
已结贴  问题点数:5 回复次数:18 
《求助~~~》unknown character '0xa1'
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<infoheader.biHeight;i++)fwrite(img[i],width,1,fpout);}




/*以上是我的原代码,错误显示为"图片读入读出.cpp
D:\math picture\图片读入读出.cpp(105) : error C2018: unknown character '0xa1'
D:\math picture\图片读入读出.cpp(105) : error C2018: unknown character '0xa1'
Error executing cl.exe.

图片读入读出.obj - 2 error(s), 0 warning(s)
我已经试过很多办法啦,包括用insert重新输入,仍然存在这两个bug!!!问题在哪里,要崩溃了~~~高手哥哥求赐教"
 
搜索更多相关主题的帖子: character 调色板 图片 信息 
2015-03-29 13:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:5 
第105行有全角字符

授人以渔,不授人以鱼。
2015-03-29 13:26
valerychen
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2015-3-17
得分:0 
回复 2楼 TonyDeng
怎么找到呀?我都重新输入了~~就是不正确啊
2015-03-29 13:31
valerychen
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2015-3-17
得分:0 
回复 2楼 TonyDeng
高手大哥~~~还是找不到啊,重新输入都不对呀~~~呜呜呜
2015-03-29 13:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
看现场,你把105行那一屏截图出来看。

授人以渔,不授人以鱼。
2015-03-29 13:37
valerychen
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2015-3-17
得分:0 
高手
2015-03-29 13:47
valerychen
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2015-3-17
得分:0 
回复 5楼 TonyDeng
截拉,高手请看~~~
2015-03-29 13:48
valerychen
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2015-3-17
得分:0 
回复 5楼 TonyDeng
/*****************
1.本函数的功能:实现图像的读取与输出,
                文件为bmp文件,分为1位,4位,8位,16位,24位

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





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

#include <stdio.h>
/*      #include <windows.h>            
//直接引用Windows函数功能,直接引用出现了错误,那么我就自己定义好了      */
#include <math.h>


/*    */
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<infoheader.biHeight;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<infoheader.biHeight;i++)
fwrite(img[i],width,1,fpout);}
 
   
/*以上为全部的源代码*/
2015-03-29 13:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
最后那行是105行吗?后面没东西了?把这行前后几行拉黑了看看。

授人以渔,不授人以鱼。
2015-03-29 13:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
fwrite()后面那一行第一个是全角空格,还说重新输入过。

授人以渔,不授人以鱼。
2015-03-29 13:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-443227-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.065993 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved