首页 文章

读取.ppm时,C不会进入下一行

提问于
浏览
2

所以我有一个.ppm文件,目标是将每个像素读取到相应的r [] g []和b []元素 . 代码读取第一行(idk是否正确),但它不再进一步 . 我不确定我是否需要这些 getc(fp); 才能跳过空格 . 读取每一行并将其解析为int不是一种选择 . 谢谢你的帮助 .

int main(int argc, char** argv) 
    {
        int height;
        int width;
        int max;
        FILE *fp;
        fp = fopen("vit_small.ppm", "r");
        fscanf(fp, "%*[^\n]\n", NULL);
        fscanf(fp, "%d %d", &width, &height);
        printf("Width is %d height is %d \n", width, height);
        fscanf(fp, "%d", &max);
        printf("Maximum value %d \n", max);
        int r [height][width];
        int g [height][width];
        int b [height][width];
        int hist [5];
        int w = 0;
        int h = 0;
        char buffer [1000];
        for (;w<height;w++)
        {
            printf("Row number %d \n", w);
            for (;h<width;h++)
                {
                fread(&r[w][h], 1, 1, fp);
                printf("%d ", r[w][h]);
                getc(fp);
                fread(&g[w][h], 1, 1, fp);
                printf("%d ", g[w][h]);
                getc(fp);
                fread(&b[w][h], 1, 1, fp);
                printf("%d ", b[w][h]);
                getc(fp);
                }
            getc(fp);
            printf("\n");
        }

        int i = 0;
        int j = 0;
        for (;i<height; i++) 
        {
            for (;j<width; j++) 
            {
                printf("%d %d %d ", r[i][j], g[i][j], b[i][j]);
            }
        printf("\n");
        }

     fclose(fp);
     FILE * res;
     res = fopen ("Image_output.ppm", "w");
     fprintf (res, "P6\n");
     fprintf(res, "%d\n", width);
     fprintf(res, "%d\n", height);
     fprintf(res, "%d\n", max);
     i = 0;
     j = 0;
     for(; i < height; i++)
     {
         for(; j < width; j++)
         {
             fprintf(res, "%d %d %d", r[i][j], g[i][j], b[i][j]);
         }
         fprintf(res,"\n");
     }
        return (EXIT_SUCCESS);
    }

1 回答

  • 1

    PPM的P6格式将每个主要存储为一个字节,没有行,也没有空格 . 因此,如果图像是10乘6,则在255和换行符后面将有180个字节(10x6x3) . 见Wikipedia entry on PPM .

相关问题