Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我的代码在windows上运行,但在linux上失败。Eror:文件过早结束bmp_C_Linux_Padding_Bmp - Fatal编程技术网

C 我的代码在windows上运行,但在linux上失败。Eror:文件过早结束bmp

C 我的代码在windows上运行,但在linux上失败。Eror:文件过早结束bmp,c,linux,padding,bmp,C,Linux,Padding,Bmp,我必须使用一些bmp文件,以便将某些像素的颜色更改为新颜色;将忽略withe像素。我的代码似乎在windows上运行,但一旦我在linux上尝试,新的bmp文件就不会打开,因为“文件bmp过早结束”。 输入文件包含bmp文件的名称和像素的新颜色。 我必须创建一个新文件,文件末尾带有“\u task1.bmp” #include <stdio.h> #include <stdlib.h> typedef struct bmp_fileheader { unsigne

我必须使用一些bmp文件,以便将某些像素的颜色更改为新颜色;将忽略withe像素。我的代码似乎在windows上运行,但一旦我在linux上尝试,新的bmp文件就不会打开,因为“文件bmp过早结束”。 输入文件包含bmp文件的名称和像素的新颜色。 我必须创建一个新文件,文件末尾带有“\u task1.bmp”

#include <stdio.h>
#include <stdlib.h>
typedef struct bmp_fileheader
{
    unsigned char  fileMarker1; /* 'B' */
    unsigned char  fileMarker2; /* 'M' */
    unsigned int   bfSize; /* File's size */
    unsigned short unused1;
    unsigned short unused2;
    unsigned int   imageDataOffset; /* Offset to the start of image data */
}FH;
typedef struct bmp_infoheader
{
    unsigned int   biSize; /* Size of the info header - 40 bytes */
    signed int     width; /* Width of the image */
    signed int     height; /* Height of the image */
    unsigned short planes;
    unsigned short bitPix;
    unsigned int   biCompression;
    unsigned int   biSizeImage; /* Size of the image data */
    int            biXPelsPerMeter;
    int            biYPelsPerMeter;
    unsigned int   biClrUsed;
    unsigned int   biClrImportant;
}IH;
int main()
{
    FH fh;    IH ih;
    FILE *f,*g;
    int B,G,R,i,j,padding;
    char fileName[22],fileNameTask[22],*p;
    unsigned char clr[3],clrNew[3];

    f=fopen("input100.txt","rt");
    if(f==NULL)
        return -1;

    fscanf(f,"%s %d %d %d",&fileName,&B,&G,&R);
    clrNew[0]=B; clrNew[1]=G; clrNew[2]=R;
    fclose(f);

    f=fopen(fileName,"rb");
    if(f==NULL)
        return -1;

    p=strchr(fileName,'.');   *p='\0';
    strcpy(fileNameTask,fileName); strcat(fileNameTask,"_task1.bmp");

    g=fopen(fileNameTask,"wb");
    fread(&fh.fileMarker1,1,1,f); fread(&fh.fileMarker2,1,1,f); // B M
    fread(&fh.bfSize,4,1,f);
    fread(&fh.unused1,2,1,f); fread(&fh.unused1,2,1,f);
    fread(&fh.imageDataOffset,4,1,f);

    fwrite(&fh.fileMarker1,1,1,g); fwrite(&fh.fileMarker2,1,1,g);
    fwrite(&fh.bfSize,4,1,g);
    fwrite(&fh.unused1,2,1,g); fread(&fh.unused1,2,1,g);
    fwrite(&fh.imageDataOffset,4,1,g);

    fread(&ih.biSize,4,1,f); // 40
    fread(&ih.width,4,1,f); fread(&ih.height,4,1,f);
    fread(&ih.planes,2,1,f);
    fread(&ih.bitPix,2,1,f); // 24
    fread(&ih.biCompression,4,1,f);
    fread(&ih.biSizeImage,4,1,f);
    fread(&ih.biXPelsPerMeter,4,1,f); fread(&ih.biYPelsPerMeter,4,1,f); // 0
    fread(&ih.biClrUsed,4,1,f);   fread(&ih.biClrImportant,4,1,f); // ambele 0

    fwrite(&ih.biSize,4,1,g); // 40
    fwrite(&ih.width,4,1,g); fwrite(&ih.height,4,1,g);
    fwrite(&ih.planes,2,1,g);
    fwrite(&ih.bitPix,2,1,g); // 24
    fwrite(&ih.biCompression,4,1,g);
    fwrite(&ih.biSizeImage,4,1,g);
    fwrite(&ih.biXPelsPerMeter,4,1,g); fwrite(&ih.biYPelsPerMeter,4,1,g); // 0
    fwrite(&ih.biClrUsed,4,1,g);   fwrite(&ih.biClrImportant,4,1,g); // ambele 0
    padding=(ih.width*3) % 4;
    for(i=0;i<ih.height;i++)
    {
        for(j=0;j<ih.width;j++)
        {
            fread(&clr,3,1,f);
            if(clr[0]==255 && clr[1]==255 && clr[2]==255)
                fwrite(clr,3,1,g);
            else
                fwrite(clrNew,3,1,g);
        }
        switch(padding)
        {
            case 3: fread(&clr,1,1,f); clr[0]=0; fwrite(&clr,1,1,g); break;
            case 2: fread(&clr,2,1,f); clr[0]=clr[1]=0; fwrite(&clr,2,1,g); break;
            case 1: fread(&clr,3,1,f); clr[0]=clr[1]=clr[2]=0; fwrite(&clr,3,1,g);
        }
    }
    fclose(f); fclose(g);
    return 0;
}
#包括
#包括
typedef结构bmp_文件头
{
未签名的字符文件Marker1;/*'B'*/
未签名的字符文件Marker2;/*'M'*/
unsigned int bfSize;/*文件大小*/
无符号短未使用1;
无符号短未使用2;
无符号int-imageDataOffset;/*到图像数据开头的偏移量*/
}FH;
类型定义结构bmp_信息头
{
无符号int biSize;/*信息头的大小-40字节*/
有符号整数宽度;/*图像的宽度*/
带符号整数高度;/*图像的高度*/
无符号短平面;
无符号短比特;
无符号整数双压缩;
无符号int-biSizeImage;/*图像数据的大小*/
int型双介电常数计;
int型双透仪;
不带符号的整数;
无符号整数;
}IH;
int main()
{
FH FH;IH IH;
文件*f,*g;
int B,G,R,i,j,padding;
char fileName[22],fileNameTask[22],*p;
无符号字符clr[3],clrNew[3];
f=fopen(“input100.txt”,“rt”);
如果(f==NULL)
返回-1;
fscanf(f,“%s%d%d%d”,&fileName,&B,&G,&R);
clrNew[0]=B;clrNew[1]=G;clrNew[2]=R;
fclose(f);
f=fopen(文件名,“rb”);
如果(f==NULL)
返回-1;
p=strchr(文件名,'.');*p='\0';
strcpy(fileNameTask,fileName);strcat(fileNameTask,“\u task1.bmp”);
g=fopen(fileNameTask,“wb”);
fread(&fh.fileMarker1,1,1,f);fread(&fh.fileMarker2,1,1,f);//B M
fread(和fh.bfSize,4,1,f);
fread(&fh.unused1,2,1,f);fread(&fh.unused1,2,1,f);
fread(和fh.imageDataOffset,4,1,f);
fwrite(&fh.fileMarker1,1,1,g);fwrite(&fh.fileMarker2,1,1,g);
fwrite(和fh.bfSize,4,1,g);
fwrite(&fh.unused1,2,1,g);fread(&fh.unused1,2,1,g);
fwrite(和fh.imageDataOffset,4,1,g);
fread(&ih.biSize,4,1,f);//40
fread(和ih.宽度,4,1,f);fread(和ih.高度,4,1,f);
fread(和ih平面,2,1,f);
fread(&ih.bitPix,2,1,f);//24
fread(双压缩,4,1,f);
fread(和ih.biSizeImage,4,1,f);
fread(&ih.biXPelsPerMeter,4,1,f);fread(&ih.biYPelsPerMeter,4,1,f);//0
fread(&ih.biClrUsed,4,1,f);fread(&ih.biClrUsed,4,1,f);//ambele 0
fwrite(&ih.biSize,4,1,g);//40
写入(&ih.宽度,4,1,g);写入(&ih.高度,4,1,g);
F写入平面和ih平面,2,1,g);
fwrite(&ih.bitPix,2,1,g);//24
fwrite(双压缩,4,1,g);
fwrite(和ih.biSizeImage,4,1,g);
fwrite(&ih.biXPelsPerMeter,4,1,g);fwrite(&ih.biYPelsPerMeter,4,1,g);//0
fwrite(&ih.biClrUsed,4,1,g);fwrite(&ih.biClrUsed,4,1,g);//ambele 0
填充=(ih.宽度*3)%4;

对于(i=0;i注意POSIX在文件打开模式下没有
t
。它特定于Windows。如果希望它工作,请使用
b

f=fopen("input100.txt","rb");
                         ^

事实上,ISO C没有
t
。ISO C定义的唯一标志是
b
+
。在尝试编写可移植代码时,请特别注意这些标志。

尝试以二进制模式打开二进制文件。请不要破坏您的帖子。当您在十六进制编辑器中打开它们。这也会给你的代码提供很好的提示。