how to image load and save it by C

51 views Asked by At

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

0

There are 0 answers