본문 바로가기
코스웨어/11년 내장형하드웨어

[내장형]이동현 10월 13일 일일보고서

by 알 수 없는 사용자 2011. 10. 13.
728x90
반응형

◎Bitmap
-파일을 여는 함수는 C에서는 표준이 fopen이다. 하지만 윈도우에서 CreateFile함수가 사용된다.


-그림판에서 단축키를 Ctrl+E를 눌러주게 되면 특성창이 나오면서 너비와 높이를 설정해주면 쉽게 설정가능하다.
-각각 빨강,파랑,초록으로 빛의 3원색을 10*10크기로 r.bmp, b.bmp, g.bmp를 만들어 준다.

☆비트맵의 구조체


-bfType은 파일의 형태를 지정하는 매직넘버이며, 비트맵 경우 매직넘버가 반드시 BM이어야 되며, 리눅스 실행파일은 ELF이다. 윈도우는 MZ이다. 2byte를 차지한다.
-bfSize는 비트맵의 크기를 나타낸다.
-bfReserved는 예약어로 사용하지 않는다. Reserved로 같은 말로 '패딩'이 있다. '패딩'은 칸을 띄워 놓는다는 의미이다.
-bfoffBits는 비트맵의 실제 이미지의 시작위치를 나타낸다.

☆HexaView를 이용한 Bitmap파일 열기


-main함수의 인자값을 사용하여서 실행할때 ./main 파일이름 을 하게되면 원하는 파일을  Hexaview를 이용하여 뿌려줄수가 있다.
-buf[100*1024]를 사용하게되면 스택의 크기가 100Kbyte가 되어서 Stack의 overflow가 발생하면 어쩌냐는 의문은?? 리눅스에서 ulimit -a명령을
사용하시면 궁금증 해결 가능합니다. 스택의 제한은 8192KBytes로 8Mbytes이기 때문입니다.
# ulimit -a
core file size (blocks) 0
data seg size (kbytes) unlimited
file size (blocks) unlimited
max locked memory (kbytes) unlimited
max memory size (kbytes) unlimited
open files 1024
pipe size (512 bytes) 8
stack size (kbytes) 8192
cpu time (seconds) unlimited
max user processes 1024
virtual memory (kbytes) unlimited

*추가사항
비트맵파일은 가로축 크기가 4의 배수가 아니면 4의 배수가 되도록 쓰레기값을 채운다는 것입니다.
0x54와 0x55가 그 쓰레기값으로 각 y축이 끝날 때 마다 반복됩니다.
즉, 10*10크기의 비트맵그림은 32*10Bytes의 Raw Data로 이루어져 있습니다.
검증은 파일사이즈 - 오프셋 = 374 - 54 = 320Bytes

-수만 사마님의 좋은 정보입니다.!!

☆결과


-매직넘버는 4D42(big endian)를 %C로 출력하면 BM이 나온다. 비트맵은 항상 BM이 나와야 된다.
-비트맵 사이즈는  00 00 01 76(big endian)이 출력되는데 10진수로 바꾸면 374가 된다.


-등록정보로도 비트맵 파일의 크기를 확인할수 있다.
-시작 위치가 0x36(10진수 56)인데 0x36위치에 00 00 FF(little endian)가 출력된다. CPU의 특성상 값이 리틀 인디안으로 저장되기 때문에 저장이 BGR로 저장된다. 빨간색이 저장되어 있어서 R위치에 FF가 출력된다. BGR각각 1byte씩 차지하기 때문에 3byte로 출력된다.

☆G.bmp를 입력했을 경우


-G가 저장된곳이 FF가 출력된다.
☆B.bmp를 입력했을 경우




※비트맵이 아닌 파일을 출력했을 경우


-리눅스 실행 파일을 실행 했을 경우 매직넘버는 E가 출력된다. main에서 BM이 아닐경우 종료를 하게 만들어 두었다.

*Bitmap viewer project는 다들 잘하고 계시네요!!! 젤뒤에서 지켜보고 있습니다..ㅋㅋㅋㅋㅋ


728x90