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) 입니다.
남는공간 문제임
BMP가 한줄 저장할때 뒤에 0을 채워넣음 그거 고려 안하고 PGM에 그냥 출력해서 그런듯
아니면 File offset이 있었는데 그걸 무시해서 그런거 아닐까??
오 일단 감사합니다. 써주신거 찾아본 다음에도 안되면 HxD에서 bmp랑 똑같이 바꾼다음에 나오는 이미지 봐야겠네요... 도움 감사합니다.
fseek이라는 함수를 이용해서 읽어오셔야할듯. 님이 짠거랑 가장 비슷한 코드 (PGM 부분은 없음) 있으니까 함 참고하시면 좋을듯
https://dojang.io/mod/page/view.php?id=704