C - bmp파일을 raw파일로 변환하기
Updated:
제가 C언어를 공부하면서 배웠던 문제를 공유하겠습니다.
이번 post는 bmp파일의 이미지를 읽은 후 raw파일로 변환해 저장하는 문제입니다.
입력의 lena파일은 256*256 size의 컬러 사진파일입니다.
파일 입,출력 포스팅에 있는 주석들은 생략하였습니다.
#pragma warning(disable:4996)
#include <stdio.h>
#include <windows.h>
#define T_SIZE 3*256*256
void BGRtoRGB(BYTE* BGR, BYTE* RGB, unsigned int Size);
void change(BYTE* Image);
void main()
{
FILE* infile = fopen("Lena_Color.bmp", "rb");
FILE* outfile = fopen("Lenna_small.raw", "wb");
BITMAPFILEHEADER hf;
fread(&hf, sizeof(BITMAPFILEHEADER), 1, infile);
BITMAPINFOHEADER hInfo;
fread(&hInfo, sizeof(BITMAPINFOHEADER), 1, infile);
BYTE* lpImg = (BYTE*)malloc(hInfo.biSizeImage * sizeof(unsigned char));
BYTE* lpOutImg = (BYTE*)malloc(T_SIZE * sizeof(unsigned char));
fread(lpImg, sizeof(unsigned char), hInfo.biSizeImage, infile);
BGRtoRGB(lpImg, lpOutImg, T_SIZE);
change(lpOutImg);
fwrite(lpOutImg, sizeof(unsigned char), T_SIZE, outfile);
fclose(infile);
fclose(outfile);
}
void BGRtoRGB(BYTE* BGR, BYTE* RGB, unsigned int Size) // RGB로 변환 함수
{
for (unsigned int i = 0; i < Size; i = i + 3)
{
RGB[i] = BGR[i + 2];
RGB[i + 1] = BGR[i + 1];
RGB[i + 2] = BGR[i];
}
}
void change(BYTE* Image) // 상하 반전 함수
{
unsigned int i, j, ch;
for (i = 0; i < 256 / 2; i++)
for (j = 0; j < 768; j++)
{
ch = Image[i * 768 + j];
Image[i * 768 + j] = Image[(256 - i - 1) * 768 + j];
Image[(256 - i - 1) * 768 + j] = ch;
}
}
Leave a comment