C - PGM 和 PPM - 动态分配 table,图像切成两半
C - PGM and PPM -dynamically allocated table, image cut in half
我有一个可以处理 PGM 图像的程序。我必须重新制作它,以便它也适用于 PPM 图像。我现在使用动态分配的 table 将图像存储在内存中。问题是它在 PGM 图像上效果很好,但 PPM 却减半了。
Input&output
这是怎么回事?这些是我认为可疑的地方:
这就是我创建 table 的方式:
obraz->piksele=(int**)malloc(obraz->wymy*sizeof(int *));
for(i=0; i<obraz->wymy; i++)
{
obraz->piksele[i]=(int*)malloc(obraz->wymx*sizeof(int));
}
for (i=0;i<obraz->wymy;i++) {
for (j=0;j<obraz->wymx;j++) {
fscanf(plik_we,"%d",&(obraz->piksele[i][j]));
}
}
}
return obraz->wymx*obraz->wymy;
}
这是我保存新文件的方式:
int zapisz(FILE *plik_wy,TObraz *obraz)
{
int i,j;
if(obraz->format==2)
fprintf(plik_wy,"P2\n");
else
fprintf(plik_wy,"P3\n");
fprintf(plik_wy,"%d %d\n",obraz->wymx,obraz->wymy);
fprintf(plik_wy,"%d\n",obraz->szarosci);
for(i=0;i<obraz->wymy;i++)
{
for(j=0;j<obraz->wymx;j++)
{
fprintf(plik_wy,"%d ",obraz->piksele[i][j]);
if(j>1 && j%15==0)
fprintf(plik_wy,"\n");
}
}
return 0;
}
还有 TObraz 的结构:
typedef struct
{
int **piksele;
int format;
int wymx;
int wymy;
int szarosci;
} TObraz;
您正在做的 malloc
对于 PGM(灰度)和 PPM(彩色图像)文件是一样的。在您的结果中,PPM 图像没有被切成两半,而是被切成 1/3。
首先,您正在执行的 malloc 应该是:
obraz->piksele=(int**)malloc(obraz->wymy*sizeof(int *));
for(i=0; i<obraz->wymy; i++)
{
obraz->piksele[i]=(int*)malloc(3 * obraz->wymx*sizeof(int));
}
根据您的最终应用程序,文件保存可能会有更多更改。
各格式规范参考文献:
我有一个可以处理 PGM 图像的程序。我必须重新制作它,以便它也适用于 PPM 图像。我现在使用动态分配的 table 将图像存储在内存中。问题是它在 PGM 图像上效果很好,但 PPM 却减半了。 Input&output 这是怎么回事?这些是我认为可疑的地方:
这就是我创建 table 的方式:
obraz->piksele=(int**)malloc(obraz->wymy*sizeof(int *));
for(i=0; i<obraz->wymy; i++)
{
obraz->piksele[i]=(int*)malloc(obraz->wymx*sizeof(int));
}
for (i=0;i<obraz->wymy;i++) {
for (j=0;j<obraz->wymx;j++) {
fscanf(plik_we,"%d",&(obraz->piksele[i][j]));
}
}
}
return obraz->wymx*obraz->wymy;
}
这是我保存新文件的方式:
int zapisz(FILE *plik_wy,TObraz *obraz)
{
int i,j;
if(obraz->format==2)
fprintf(plik_wy,"P2\n");
else
fprintf(plik_wy,"P3\n");
fprintf(plik_wy,"%d %d\n",obraz->wymx,obraz->wymy);
fprintf(plik_wy,"%d\n",obraz->szarosci);
for(i=0;i<obraz->wymy;i++)
{
for(j=0;j<obraz->wymx;j++)
{
fprintf(plik_wy,"%d ",obraz->piksele[i][j]);
if(j>1 && j%15==0)
fprintf(plik_wy,"\n");
}
}
return 0;
}
还有 TObraz 的结构:
typedef struct
{
int **piksele;
int format;
int wymx;
int wymy;
int szarosci;
} TObraz;
您正在做的 malloc
对于 PGM(灰度)和 PPM(彩色图像)文件是一样的。在您的结果中,PPM 图像没有被切成两半,而是被切成 1/3。
首先,您正在执行的 malloc 应该是:
obraz->piksele=(int**)malloc(obraz->wymy*sizeof(int *));
for(i=0; i<obraz->wymy; i++)
{
obraz->piksele[i]=(int*)malloc(3 * obraz->wymx*sizeof(int));
}
根据您的最终应用程序,文件保存可能会有更多更改。
各格式规范参考文献: