파일이 어떻게 저장되어 있는지 보기 위해서 bitmap 파일을 읽어 보겠다.
bitmap 파일도 결국 1과 0 으로 이루어지 데이터이다.
이를 이해하기 위해서 bitmap 파일 헤더가 어떻게 저장 되어 있는 지 알아보고 읽어보자
위의 정보를 이용해서 bitmap 파일 헤더에서 필요한 정보를 읽어 보자 ,
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <windows.h>
#pragma warning(disable : 4996)// 보안 문제로 뜨는 경고 메세지 무시
#pragma pack(1) // 1byte 단위로 꽉꽉 저장하기
typedef struct _smart
{
UCHAR Magic[2];
UINT FSize;
UINT Resv1;
UINT Off;
UINT HSize;
UINT Width;
UINT Height;
USHORT Planes;
USHORT BPP;
UINT Comp;
UINT DSize;
} smart;
#pragma pack(4)
int main()
{
int iFileNum;
int iRet;
smart* sp;
unsigned char a[100];
sp = a;
iFileNum = open("1.bmp", O_RDONLY|O_BINARY);
if (-1 == iFileNum)
{
printf("파일을 열수가 없습니다.");
return 0;
}
//iRet = printf("파일을 열었습니다.\n");
//printf("%d\n", iRet);
//printf("%d\n", iFileNum);
iRet = read(iFileNum, a, 100); // 읽은 파일 byte 수 출력
printf("%d\n", iRet);
printf("[%02X][%02X]\n", *(a+0), *(a + 1));
printf("%c %c\n", *(a + 0), *(a + 1));
printf("%08X\n", *(a + 2)); // 4byte 단위 출력
printf("%08X\n", *((unsigned int*)(a + 2)));
printf("********** Bitmap File Viewer **********\n");
printf("Magic Number : %c%c\n", *(a + 0), *(a + 1));
printf("File Size : %d\n", *((unsigned int*)(a + 2)));
printf("Data Offset : %d\n", *((unsigned int*)(a + 10)));
printf("Header Size : %d\n", *((unsigned int*)(a + 14)));
printf("Width : %d\n", *((unsigned int*)(a + 18)));
printf("Height : %d\n", *((unsigned int*)(a + 22)));
printf("\nstruct 사용\n");
printf("Magic Number : %c%c\n", sp->Magic[0], sp->Magic[1]);
printf("File Size : %d\n", sp->FSize);
return 0;
}
'공부,일 > c언어' 카테고리의 다른 글
터보C 설치 사용 (0) | 2021.06.15 |
---|---|
Linked List 구현 (0) | 2021.06.14 |
signed Vs unsigned (0) | 2021.06.13 |
c 언어 공부 추천 블로그 (0) | 2021.06.09 |
랜덤 액세스 :fseek(),ftell() (0) | 2021.06.07 |
댓글