C언어 bmp파일 입출력에 관해 질문 드립니다.
글쓴이: bjs026 / 작성시간: 수, 2014/03/19 - 4:37오후
bmp 파일을 binary로 읽어서 2차원배열에 넣은뒤 다시 2차원배열에 있는 bit를 bmp파일로 쓰는 프로그램입니다.
일단 동적할당 부분까지는 확인했는데
fwrite부분에서 계속 오류가 나네요 ㅜㅜ..
어떠한 오류인지 영 알수가 없어서 올립니다 ㅜㅜ
해결방법 아시는분 계시나요 ~?
#include <stdio.h>
#include <windows.h>
BITMAPFILEHEADER hf;
BITMAPINFO hin;
#define IMSI ((hf.bfSize)-sizeof(BITMAPFILEHEADER)-sizeof(BITMAPINFOHEADER))
//bf.SIze 비트맵파일의 사이즈를 불러옴
//실제 데이터 rgb가 남고 이 갯수를 이미지사이즈로 지정.
FILE *fp;
FILE *ft;
void main()
{
// 배열로 선언할수있는 한계가 지정되있다 .
//보통 비트맵에서는 몇천만개넘어감으로 배열을 사용할 수 없다.
//큰 파일의 경우 포인터를 사용하여 변수지정.
//malloc 메모리를 잡아서 변수처럼 사용한다.
// data= (char*)malloc(sizeof(char)*IMSI) -> IMSI가 얼마나 메모리 지정할지 정한다.
char **data; //data의 변수에 하나하나씩 데이터를 집어넣는다.
int i,k,temp;
fopen_s(&ft, "white.bmp", "rb"); //fopen 파일을 연다. rb 바이너리를 읽음
fopen_s(&fp, "result.bmp", "wb"); //쓰는 파일.
fread(&hf, 1, sizeof(BITMAPFILEHEADER), ft); //fread 파일을 읽음.
//1. 어느변수에 저장하겠는가. 2 . 몇개단위로 읽을 것인가. 3 얼만큼? 헤더사이즈만큼. 4. 어디서? ft에서
//커서 그대로이므로 그뒤에 읽음. 인포헤더
fread(&hin, 1, sizeof(BITMAPINFOHEADER), ft);
temp = (IMSI / 160) + 1;
printf("%u - %u", IMSI, temp);
data = (char**)malloc(sizeof(char*)*temp); // 160bit/1frame 넣을 2차원 배열 동적할당
for (i = 0; i<temp; i++)
{
data[i] = (char*)malloc(sizeof(char)* 160);
}
fread(data, 1, IMSI, ft); //*안썻을경우 전체배열을 이야기한다.
//for(i=0;i<IMSI;i++)
fwrite(&hf, 1, sizeof(BITMAPFILEHEADER), fp);//다른파일에 쓴다. 1 어떤것을 (hf를 쓴다) 2.단위 , 4 어느곳
fwrite(&hin, 1, sizeof(BITMAPINFOHEADER), fp);
for (i = 0; i < temp ; i++)
for(k = 0; k<160 ; k++)
fwrite(&data[i][k], 1, sizeof(char), fp);
fclose(fp);
fclose(ft);
}Forums:


?
오류가 어떻게 나는지, 어디서 나는지 일단 언급을 안하셔서 정확히 모르겠습니다.
직접 소스 디버깅 해보시면 쉽게 찾으실 것이라고 생각하지만.
일단 전역으로는 BITMAPINFO 구조체를 선언하셨는데 정작 fwrite 에서는
BITMAPINFOHEADER 의 크기만큼 쓰는 것은 말이 안되므로 이 부분을
수정해보시기 바랍니다.
댓글 달기