簡體   English   中英

C - PGM和PPM - 動態分配表,圖像切成兩半

[英]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));
}

根據您的最終應用程序,可能會對文件保存進行更多更改。

每種格式規范的參考:

http://netpbm.sourceforge.net/doc/pgm.html

http://netpbm.sourceforge.net/doc/ppm.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM