[英]C - PGM and PPM -dynamically allocated table, image cut in half
我有一個適用於PGM圖像的程序。 我必須重新制作它,因此它也適用於PPM圖像。 我現在使用動態分配的表將圖像存儲在內存中。 問題是它在PGM圖像上運行良好,但PPM減少了一半。 輸入和輸出發生了什么? 這些是我認為可疑的地方:
這是我創建表的方式:
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));
}
根據您的最終應用程序,可能會對文件保存進行更多更改。
每種格式規范的參考:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.