2
PGMファイルを読み込むためのライブラリを作成していますが、この問題が発生しました。CでバイナリPGMを読む
私のコードが正しくバイナリPGM画像を読み取ることができない、それは間違った値を読み取りのように、それはこのように唯一の「ノイズ」
で画像にコードを生成し、見える本当に簡単です:
void OpenPGM(PGMImage* pgm, const char* file){
FILE *pgmfile = fopen (file, "rb");
fscanf (pgmfile, "%s", pgm->magicNumber);
fscanf (pgmfile, "%d %d", &(pgm->width),&(pgm->height));
fscanf (pgmfile, "%d", &(pgm->maxValue));
pgm->data = malloc(pgm->height * sizeof(unsigned char*));
if (pgm->magicNumber[1] == '2')
{
for (int i = 0; i < pgm->height; ++i)
{
pgm->data[i] = (unsigned char*)malloc(pgm->width * sizeof(unsigned char*));
for (int j = 0; j < pgm->width; ++j)
fscanf (pgmfile, "%d", &pgm->data[i][j]);
}
} else {
fgetc(pgmfile);// this should eat the last \n
for (int i = 0; i < pgm->height; ++i)
{
pgm->data[i] = (unsigned char*)malloc(pgm->width * sizeof(unsigned char*));
fread(pgm->data[i],sizeof(unsigned char*),pgm->width,pgmfile);//reading line by line
}
}
}
PGMImage
はこのようになります
typedef struct PGMImage {
char magicNumber[2];
unsigned char** data;
unsigned int width;
unsigned int height;
unsigned int maxValue;
} PGMImage;
私は間違っていますか?
うわー、あなたは絶対に正しいです。くそー、ポインタはやっかいです。しかし、この修正でもまだ動作しません、イメージはまだ騒々しいです。私はいくつかの情報で自分の投稿を編集します。 –
さて、問題は簡単に見つかりました。私は写真にオリジナルのマジックナンバーを印刷していましたが、読み込み後の情報は常にASCII形式で表示されていたので、常にP2にしてください。お手伝いありがとう! –