Firstly, i'm not good at English. So please understand it.
#include <stdio.h>
#include <windows.h>
#define xsize 570 // x사이즈
#define ysize 456 // y사이즈
#define INPUTFILENAME "robot2.bmp"
#define OUTPUTFILENAME "testout.bmp"
int is_success_open_file(FILE *filename);
int is_BMP(BITMAPFILEHEADER hf);
void store_img(BITMAPFILEHEADER hf, BITMAPINFOHEADER hInfo, RGBQUAD hRGB[], unsigned int InputImg[xsize][ysize], unsigned int OutputImg[xsize][ysize]);
void make_img(BITMAPFILEHEADER hf, BITMAPINFOHEADER hInfo, RGBQUAD hRGB[], unsigned int OutputImg[xsize][ysize]);
int main(void)
{
BITMAPFILEHEADER hf; // "파일정보헤드" 구조체 변수 선언
BITMAPINFOHEADER hInfo; // "영상정보헤드" 구조체 변수 선언
RGBQUAD hRGB[256]; // 팔레트 정보를 위한 배열 선언
FILE *fp; // 파일 포인터
unsigned int InputImg[xsize][ysize];
unsigned int OutputImg[xsize][ysize]; // 출력 이미지
fp = fopen(INPUTFILENAME, "rb");
if (is_success_open_file(fp) == 1)
{
return 1;
}
/* store_img와 make_img 함수에서 이미 fread 함수를 호출 하지만, main 함수에서도 해야 함. 이유는 잘 모르겠지만 main 함수에서 호출하지 않으면
반환된 이미지 파일을 읽을 수 없게 됨
fread(&hf, sizeof(BITMAPFILEHEADER), 1, fp);
fread(&hInfo, sizeof(BITMAPINFOHEADER), 1, fp);
fread(hRGB, sizeof(RGBQUAD), 256, fp);*/
// store_img 함수 호출
store_img(hf, hInfo, hRGB, InputImg, OutputImg);
printf("size of BITMAPINFOHEADER = %d\n", hInfo.biSize); // BITMAPINFOHEADER 구조체의 크기
printf("WIDTH OF IMG = %d\n", hInfo.biWidth); // 이미지의 가로 크기
printf("HEIGHT OF IMG = %d\n", hInfo.biHeight); // 이미지의 세로 크기
printf("BYTE SIZE OF IMG = %d\n", hf.bfSize); // byte 단위로 파일 전체 크기
printf("IS IMG BMP? = %hx. if result : 4d42, it means BMP\n", hf.bfType); // "파일이 BMP"가 맞는지
printf("NUMBER OF USED COLORS = %d\n", hInfo.biClrUsed); // 실제 사용 색상 수
printf("BIT PER PIXEL = %d\n", hInfo.biBitCount); // 픽셀당 비트 수 (컬러, 흑백 구별)
fclose(fp);
return 0;
}
int is_success_open_file(FILE *filename)
{
if (filename == NULL)
{
printf("failed to open file\n\n");
return 1;
}
else
{
printf("successed to open file\n\n");
return 0;
}
}
int is_BMP(BITMAPFILEHEADER hf)
{
if (hf.bfType != 0x4D42) // 비트맵 파일이 맞는지 판단
{
printf("file is not BMP\n\n\n");
return 1;
}
else
{
printf("file is BMP.\n\n\n");
return 0;
}
}
void store_img(BITMAPFILEHEADER hf, BITMAPINFOHEADER hInfo, RGBQUAD hRGB[], unsigned int InputImg[xsize][ysize], unsigned int OutputImg[xsize][ysize])
{
FILE *fp = fopen(INPUTFILENAME, "rb");
fread(&hf, sizeof(BITMAPFILEHEADER), 1, fp);
fread(&hInfo, sizeof(BITMAPINFOHEADER), 1, fp);
fread(hRGB, sizeof(RGBQUAD), 256, fp);
fread(InputImg, xsize * ysize, 1, fp);
fclose(fp);
for(int i = 0; i < xsize; i++)
{
for(int k =0; k < ysize; k++)
{
OutputImg[i][k] = InputImg[i][k];
}
}
make_img(hf, hInfo, hRGB, OutputImg);
}
void make_img(BITMAPFILEHEADER hf, BITMAPINFOHEADER hInfo, RGBQUAD hRGB[], unsigned int OutputImg[xsize][ysize])
{
FILE *fp = fopen(OUTPUTFILENAME, "wb");
fwrite(&hf, sizeof(BITMAPFILEHEADER), 1, fp);
fwrite(&hInfo, sizeof(BITMAPINFOHEADER), 1, fp);
fwrite(hRGB, sizeof(RGBQUAD), 256, fp);
fwrite(OutputImg, xsize * ysize, 1, fp);
fclose(fp);
}
I try to load image and save it. when I run this, there is no compile Error. But Nothing's printed and the file's shut down in five seconds. What I need to do? please answer.. I need your help....
print, and save image file