티스토리 뷰
안녕하세요!
오늘은 bmp파일을 raw파일로 바꾸는 방법에 대해 알아보겠습니다.
BMP파일 뜯어보기
안녕하세요!오늘은 BMP파일에 대해서 알아보겠습니다. ●BMP파일이란?비트맵(Bitmap) 이미지 파일 형식으로, 특히 windows 환경에서 많이 사용하는 이미지 형식입니다.BMP파일은 각 픽셀의 색상 정보
unrunhy.tistory.com
이 글을 먼저 읽고 오시는 것을 추천드립니다.
raw파일은 픽셀 데이터만 저장되는데,
bmp파일은 픽셀 데이터 앞에 헤더부분이 있습니다!
bmp파일에 offset의 위치를 픽셀 데이터의 제일 앞 부분에 위치 시켜야합니다.
그래서 bmp파일의 헤더 부분을 저희가 만든 구조체에 저장한 후,
offset의 위치가 픽셀 데이터를 가리킬때,
B G R -> R G B 를 고려해 메모리를 저장하도록 하겠습니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
//제가 실습한 사진의 크기는 가로 256, 세로 256 입니다
#define VER 256
#define HOR 256
#define B_SIZE (VER*HOR)
struct BITMAPINFOHEADER {
unsigned int biSize;
unsigned int biWidth;
unsigned int biHeight;
unsigned short biPlanes;
unsigned short biBitCount;
unsigned int biCompression;
unsigned int biSizeImage;
int biXPelsPerMeter;
int biYPelsPerMeter;
unsigned int biClrUsed;
unsigned int biClrImportant;
} bih;
struct BITMAPFILEHEADER {
unsigned short bfType;
unsigned int bfSIZE;
unsigned short bfReserved1;
unsigned short bfReserved2;
unsigned int bfOffBits;
} bfh;
unsigned char* alloc_pic(int SIZE);
int main()
{
int i, j;
FILE* fin = fopen("Lena_Color.bmp", "rb");
FILE* fout = fopen("Lena_Color.raw", "wb");
if (!fin) { printf("ERROR :: File Can't Read\n"); exit(1); }
if (!fout) { printf("ERROR :: File Can't Save\n"); exit(1); }
// 헤더부분 먼저 읽어서 설정한 구조체에 저장하기
// 그러면 bmp파일의 offset은 픽셀데이터의 첫부분에 위치함.
fread(&bfh, sizeof(BITMAPFILEHEADER), 1, fin);
fread(&bih, sizeof(BITMAPINFOHEADER), 1, fin);
// 읽어들인 파일이 bmp파일인지 확인
if (bfh.bfType != 0x4D42) { printf("Not a valid BMP file.\n"); printf("bfType: %x \n", bfh.bfType); exit(1); }
//메모리 할당
unsigned char* bmp1 = alloc_pic(bih.biSizeImage);
unsigned char* raw1 = alloc_pic(B_SIZE * 3);
//bmp1 메모리 공간에 픽셀데이터 저장하기
fread(bmp1, sizeof(unsigned char), bih.biSizeImage, fin);
// bmp파일의 B G R -> raw파일의 R G B 로 변환하여 저장하기
for (i = 0; i < VER; i++) {
for (j = 0; j < HOR; j++) {
raw1[(VER * i + j) * 3] = bmp1[(VER * (VER - i - 1) + j) + 2];
raw1[(VER * i + j) * 3 + 1] = bmp1[(VER * (VER - i - 1) + j) + 1];
raw1[(VER * i + j) * 3 + 2] = bmp1[(VER * (VER - i - 1) + j)];
}
}
fwrite(raw1, sizeof(unsigned char), B_SIZE * 3, fout);
fclose(fin);
fclose(fout);
free(bmp1);
free(raw1);
printf("success");
return 0;
}
/*** function ***/
unsigned char* alloc_pic(int SIZE)
{
unsigned char* pic;
if ((pic = (unsigned char*)calloc(SIZE, sizeof(unsigned char))) == NULL) {
printf("\n malloc_picture : Picture structure \n");
exit(1);
}
return pic;
}
이렇게 하시면,
bmp파일을 raw파일로 쉽게 바꿀 수 있습니다!
'C언어' 카테고리의 다른 글
[C언어] 3-2. raw파일을 bmp파일로 변환하기 (0) | 2024.11.11 |
---|---|
+BMP파일 뜯어보기 (1) | 2024.11.09 |
[C언어] 2.기본적인 영상처리(2) (3) | 2024.11.08 |
[C언어] 1. raw파일 복사하는 방법 (7) | 2024.11.07 |
[C언어] 2.기본적인 영상처리(1) (0) | 2024.11.07 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- activationfunction
- 티스토리챌린지
- 회전이동
- bmp헤더
- MLP
- klein4group
- 활성화함수
- DEEPLEARNING
- 영상처리 #기초
- bias
- 오블완
- RAW
- rawtobmp
- generator
- errordetecting
- cyclicgroup
- 현대대수학
- errorcorrecting
- raw회전이동
- 다층퍼셉트론
- 편향
- fashionMNIST
- perceptron
- sungroup
- bmptoraw
- BMP
- 의류분류
- 정보전송
- 퍼셉트론
- 신경망딥러닝
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
글 보관함