C_BMP RGB 데이터 읽기

2015. 8. 4. 11:25C/코드

 

bmp파일의 header를 파악하셨다면, 데이터를 읽어들이는 건 그리 어렵지 않습니다.

 
우선, bmp 헤더 정보중에 데이터가 시작하는 offset 이 있는데

파일 포인터를 그 위치로 옮기셔야 됩니다. (fseek() 함수를 사용 하면 되겠죠.)

그리고 파일 끝까지 한 바이트씩 읽어 들이면 됩니다.

 
단, 아시겠지만 BMP형식은 데이터가 거꾸로 담겨있기 때문에

정상적으로 저장하기 위해서는 위에 설명한 데로 하면 안됩니다.

파일 포인터를 파일 끝으로 이동시킨 뒤 데이터 시작 offset까지 거꾸로 읽어야 겠죠.

 
한 가지 더 주의 하실 것은,

데이터를 위한 공간을 배정할 때,

이미지 width가 4의 배수일 때를 기준으로 틀을 만들어 놓았다는 점입니다.

RGB 각각이 한 바이트를 차지하므로 4의 배수 일때만 그 틀에 정확히 들어 간다는 얘기죠.

 
예를 들어,

4x4, 5x5, 6x6 이미지를 비교하면 다음과 같습니다.

 

(4x4)

BGR BGR BGR BGR

BGR BGR BGR BGR

BGR BGR BGR BGR

BGR BGR BGR BGR,

 

(5x5)

BGR BGR BGR BGR BGR (dummy)

BGR BGR BGR BGR BGR (dummy)

BGR BGR BGR BGR BGR (dummy)

BGR BGR BGR BGR BGR (dummy)

BGR BGR BGR BGR BGR (dummy)

 

(6x6)

BGR BGR BGR BGR BGR BGR (dummy) (dummy)

BGR BGR BGR BGR BGR BGR (dummy) (dummy)

BGR BGR BGR BGR BGR BGR (dummy) (dummy)

BGR BGR BGR BGR BGR BGR (dummy) (dummy)

BGR BGR BGR BGR BGR BGR (dummy) (dummy)

BGR BGR BGR BGR BGR BGR (dummy) (dummy)

 

따라서, 한라인의 바이트 수가 4의 배수가 아닐 때는

4의 배수가 되도록 dummy 한 바이트를 채워 주게 되어 있습니다

'C > 코드' 카테고리의 다른 글

문자열 바이트로 변환  (0) 2020.01.15
C_문자열 반전  (0) 2015.08.04
C_배열 반전, 90, 180도  (0) 2015.08.04