所以我有一个.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);
}
答案 0 :(得分:1)
PPM的P6格式将每个主要存储为一个字节,没有行,也没有空格。因此,如果图像是10乘6,则在255和换行符后面将有180个字节(10x6x3)。看到 Wikipedia entry on PPM