FILE *originfile;

originfile=fopen("chest.bmp", "rb");


BITMAPFILEHEADER fheader;

BITMAPINFOHEADER finfo;

fread(&fheader, sizeof(BITMAPFILEHEADER), 1, originfile);

fread(&finfo, sizeof(BITMAPINFOHEADER), 1, originfile);


int rwsize = WIDTHBYTES(finfo.biBitCount * finfo.biWidth);


BYTE *reverseImg = malloc(finfo.biSizeImage);

BYTE *ipImg = malloc(finfo.biSizeImage);

fread(ipImg, sizeof(char), finfo.biSizeImage, originfile);

fclose(originfile);


FILE *tempfile = fopen("temp_Chest.pgm", "wb");

fprintf(tempfile, "P5\n");

fprintf(tempfile, "%d %d\n", finfo.biWidth, finfo.biHeight);

fprintf(tempfile, "%d\n", 255);

fwrite(ipImg, sizeof(char), finfo.biSizeImage, tempfile);


이미지가 이렇게 밀려서 나옵니다 (PGM이 지원이 안된다고 해서 캡쳐했습니다.)


일단 파일 헤더들 (비트맵 파일헤더, 비트맵 인포헤더)도 frwite,fread해서 넣어봤는데도 밀려서 나오고

제가 이해한 bmp구조는 헤더부분 빼고 데이터가 들어가 있는 크기가 biSizeImage로 알고 있습니다.

그래서 그대로 넣어주었는데 (이미지 상하 반전처리는 할 예정) 계속 밀려서 나옵니다.


어떤걸 놓친겁니까? 제 머리로는 해결이 안되서 올립니다.


widthbytes는 

#define WIDTHBYTES(bits) (((bits)+31)/32*4) 입니다.