슬라이드 1

Similar documents
BMP 파일 처리

디지털영상처리3

디지털영상처리3

교육지원 IT시스템 선진화

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

chap7.key

PowerPoint 프레젠테이션

歯9장.PDF

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - chap03-변수와데이터형.pptx

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - ch07 - 포인터 pm0415

K&R2 Reference Manual 번역본

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Gray level 변환 및 Arithmetic 연산을 사용한 영상 개선

KNK_C_05_Pointers_Arrays_structures_summary_v02


Microsoft PowerPoint - chap11-포인터의활용.pptx

금오공대 컴퓨터공학전공 강의자료

슬라이드 1

슬라이드 1

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

중간고사

untitled

PowerPoint 프레젠테이션

슬라이드 1

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

The Pocket Guide to TCP/IP Sockets: C Version

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Microsoft PowerPoint - Chapter_04.pptx

2007_2_project4

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

PowerPoint 프레젠테이션

11장 포인터

PowerPoint 프레젠테이션

Microsoft PowerPoint - a10.ppt [호환 모드]

Microsoft PowerPoint - 제11강 파일 처리

설계란 무엇인가?

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft Word - MSOffice_WPS_analysis.doc

설계란 무엇인가?

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Microsoft PowerPoint - multi-3.ppt

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

컴파일러

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

PowerPoint 프레젠테이션

금오공대 컴퓨터공학전공 강의자료

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Microsoft PowerPoint - chap11.ppt [호환 모드]

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열

Microsoft PowerPoint - Lesson13.pptx

C Programming

Lab 3. 실습문제 (Single linked list)_해답.hwp

untitled

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

쉽게 풀어쓴 C 프로그래밍

PowerPoint Template

Microsoft PowerPoint - 10_C_Language_Text_Files

02장.배열과 클래스

Microsoft PowerPoint - es-arduino-lecture-03

본 강의에 들어가기 전

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

슬라이드 1

히스토그램구하기 사전준비 : 히스토그램을저장할메모리가필요함 필요한메모리개수 à 전체영상의픽셀은그값이 0 ~ 255이므로 256 개의메모리필요함 영상을구성하는픽셀의개수는매우크므로메모리형식은 unsigned long으로해야함 ( unsigned 란 +/- 를고려하지않는다는

[ 네트워크 1] 3 주차 1 차시. IPv4 주소클래스 3 주차 1 차시 IPv4 주소클래스 학습목표 1. IP 헤더필드의구성을파악하고요약하여설명할수있다. 2. Subnet ID 및 Subnet Mask 를설명할수있고, 각클래스의사용가능한호스트수와사설 IP 주소및네트

슬라이드 1

OCW_C언어 기초

KEY 디바이스 드라이버

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

설계란 무엇인가?

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

윤성우의 열혈 TCP/IP 소켓 프로그래밍


Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - [2009] 02.pptx

untitled

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

untitled

Microsoft PowerPoint - chap12-고급기능.pptx

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - 09_(C_Programming)_(Korean)_File_Processing

Microsoft Word - KPMC-400,401 SW 사용 설명서

PowerPoint Presentation

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap4 [호환 모드]

06장.리스트

USB3-FRM13 API 매뉴얼

데이타전송

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

Transcription:

BMP 파일구조 김성영교수 금오공과대학교 컴퓨터공학부

학습목표 BMP 파일의구조및그특징을설명할수있다. 파일헤더및비트맵정보헤더의주요필드를구분하고그역할을설명할수있다. C언어를사용하여 BMP 파일을처리할수있다. 2

BMP 파일구조 File Header (BITMAPFILEHEADER) Bitmap Info. Header (BITMAPINFOHEADER) Headers of BMP LUT (RGBQUAD) Image Data 3

파일헤더 (File Header) typedef struct tagbitmapfileheader { WORD bftype; // Specifies the file type // It must be BM (4D42) DWORD bfsize; // 파일의크기 (byte) WORD bfreserved1; // reserved ( 항상 0) WORD bfreserved2; // reserved ( 항상 0) DWORD bfoffbits; // 픽셀데이터의시작오프셋 } BITMAPFILEHEADER; 4

비트맵정보헤더 (Bitmap Info Header) typedef struct tagbitmapinfoheader { DWORD bisize; // 구조체의크기 (bytes) LONG biwidth; // 비트맵의가로길이 (pixels) LONG biheight; // 비트맵의세로길이 (pixels) WORD biplanes; // 비트플레인수 ( 항상 1) WORD bibitcount; // 픽셀당비트수 (1,4,8,16,24,32) DWORD bicompression; // 압축유형 (BI_RGB) DWORD bisizeimage; // 비트맵데이터의크기 (bytes) LONG bixpelspermeter; // 수평해상도 (pixels/meter) LONG biypelspermeter; // 수직해상도 (pixels/meter) DWORD biclrused; // LUT에포함된칼라인덱스의개수 DWORD biclrimportant; // 비트맵을화면에출력하기위해 // 사용된칼라인덱스의개수 } BITMAPINFOHEADER; 5

팔레트 (Palette) typedef struct tagrgbquad { BYTE rgbblue; // B component BYTE rgbgreen; // G component BYTE rgbred; // R component BYTE rgbreserved1; // reserved } RGBQUAD; 6

BMP 파일예제 (1) 비트맵파일의내부값 BMP 파일구조확인실습 sample.bmp 7

BMP 파일예제 (2) 항목값항목값 영상데이터오프셋 영상가로길이 영상세로길이 픽셀당비트수 비트맵데이터크기 참조표의인덱스개수 8

BMP 파일특징 (1) 10 A 2 차원배열 (data) A data[1][2] 8 1 차원배열 (data) A data[12] A 9

BMP 파일특징 (2) 0 101 102 104 203 204 305 306 4997 4998 5099 (2, 1) 102 x 50 8bit gray-scale image (2, 1)? 0 101 103 105 102 104 106 207 208 311 312 5095 5096 5199 (2, 1) 10

BMP 파일특징 (3) 비트맵데이터는파일내부에서수직으로반전되어저장 for(y=0; y<biheight; y++) { for(x=0; x<biwidth; x++) { GrayImg[y][x] = Mem[(biHeight-y-1)*rwsize+x]; } } 비트맵데이터의각행은반드시 4 bytes 의배수임 #define WIDTHBYTES(bits) (((bits)+31)/32*4) rwsize = WIDTHBYTES(biBitCount*biWidth); 예 ) 가로길이가 102 인 8bit 그레이스케일영상 ((8*102)+31)/32*4 = (816+31)/32*4 = 847/32*4 = 26*4 = 104 11

Example Inverting Image /* */ 이프로그램은 8bit 그레이스케일영상의픽셀값을반전한후트루칼라포맷의영상으로저장한다. #include <stdio.h> #include <windows.h> #define WIDTHBYTES(bits) (((bits)+31)/32*4) typedef unsigned char BYTE; int main() { FILE *file; // file pointer BITMAPFILEHEADER hf; // 파일헤더 (bmp file header) BITMAPINFOHEADER hinfo; // 비트맵정보헤더 (bitmap information header) int rwsize, rwsize2; // 라인당바이트수 (bytes per a line) BYTE *lpimg; // 입력데이터포인터 (pointer for input image data) BYTE *lpoutimg; // 출력데이터포인터 (pointer for output image data) int x, y; 12

Cont d // 입력영상파일을연다 file=fopen ("input.bmp", "rb"); if(file==null) { printf("there is no file!!!\n"); return -1; } fread (&hf, sizeof(bitmapfileheader), 1, file); // 파일헤더읽음 if(hf.bftype!=0x4d42) // BMP 포맷 ('BM') 인지를확인 return -1; fread (&hinfo, sizeof(bitmapinfoheader), 1, file); // 비트맵정보헤더읽음 printf("image Size: (%3dx%3d)\n", hinfo.biwidth, hinfo.biheight); // 8 bit 회색톤영상만을입력으로받음 if(hinfo.bibitcount!= 8 hinfo.biclrused!= 0) { printf("bad File format!!\n"); return -1; } // 입출력데이터를위한라인당바이트수계산 rwsize = WIDTHBYTES(hInfo.biBitCount*hInfo.biWidth); // 입력영상 rwsize2 = WIDTHBYTES(24*hInfo.biWidth); // 출력영상 13

Cont d fseek (file, hf.bfoffbits, SEEK_SET); // 비트맵데이터가시작되는위치로 // 파일포인터를이동 // 입력영상데이터를위한메모리할당 lpimg = (BYTE *)malloc(rwsize*hinfo.biheight); // 영상데이터를입력영상으로부터읽음 fread (lpimg, sizeof(char), rwsize*hinfo.biheight, file); fclose (file); // 출력영상데이터를위한메모리할당 lpoutimg = (BYTE *)malloc(rwsize2*hinfo.biheight); for(y=0; y<hinfo.biheight; y++) { for(x=0; x<hinfo.biwidth; x++) { lpoutimg[y*rwsize2+3*x+2] = 255-lpImg[y*rwsize+x]; /* R */ lpoutimg[y*rwsize2+3*x+1] = 255-lpImg[y*rwsize+x]; /* G */ lpoutimg[y*rwsize2+3*x+0] = 255-lpImg[y*rwsize+x]; /* B */ } } 14

Cont d // 트루칼라포맷으로변환영상을저장 hinfo.bibitcount = 24; hinfo.bisizeimage = rwsize2*hinfo.biheight; hinfo.biclrused = hinfo.biclrimportant = 0; hf.bfoffbits = 54; // There is no palette hf.bfsize = hf.bfoffbits + hinfo.bisizeimage; file = fopen("output.bmp", "wb"); fwrite (&hf, sizeof(char), sizeof(bitmapfileheader), file); fwrite (&hinfo, sizeof(char), sizeof(bitmapinfoheader), file); fwrite (lpoutimg, sizeof(char), rwsize2*hinfo.biheight, file); fclose(file); // 메모리해제 free(lpoutimg); free(lpimg); } return 0; 15

Cont d 16

Lab. 이전예제에대해다음과같이기능을확장하라. 트루칼라 (true color) 포맷을지원 입력가능포맷 : 8bit gray-scale, true color images 출력포맷 : true color 영상좌측상단에 50x50 크기의사각형을그림 회색톤영상은밝기값 128, 칼라영상은빨간색 (255,0,0) 을사용 수업용게시판에있는테스트영상사용 Gray-scale image: testg.bmp, TVG.bmp True color image: test.bmp, TV.bmp Character Set : 멀티바이트문자집합사용 17

Cont d 18

학습정리 (1) 1. BMP 파일구조 File Header (BITMAPFILEHEADER), Bitmap Information Header (BITMAPINFOHEADER), LUT (RGBQUAD) 및 Image Data로구성 2. BMP 파일구조의특징 영상데이터는상하가반전되어있음 영상의각행의데이터양은 4바이트의배수이어야함 19

학습정리 (2) 3. File Header BMP 식별자 ("BM"), 파일크기및픽셀데이터의시작위치등의정보 포함 4. Bitmap Information Header 영상가로및세로길이, 픽셀당비트수, 영상데이터크기및 LUT 에포 함된엔트리개수등의정보포함 20