다음은 9x11 크기의 이미지를 표현하는 P1 파일이다.
P1
9 11
0 0 0 0 1 0 0 0 0
0 0 0 1 0 1 0 0 0
0 0 1 0 0 0 1 0 0
0 1 0 0 0 0 0 1 0
1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1
PBM(P1)의 경우 '#'을 이용하여 헤더에 주석 메시지를 포함할 수 있다.
이때, 주석이 끝나는 부분을 인식하기 위해 주석 다음에 개행을 해야한다.
↓↓↓ 아래와 같이 한 줄로 표현할 수도 있다 ↓↓↓
P1 9 11 0 0 0 0 1 0 0 0 0 ...
PBM P1과 동일한 이미지의 P4 형식은 각 픽셀을 단일 비트로 나타내며, 바이트 당 8픽셀을 패킹한다. 전체 바이트를 채우기 위해 각 행의 끝에 패딩 비트가 추가된다.
'PBM (P1)'에서 사용한 9x11 크기의 P1 파일을 P4 형식으로 변환하는 과정은 아래와 같다.
1) P4 헤더 형식은 P1과 동일하게 ASCII로 표현한다.
P4
9 11
→ ASCII 데이터를 Hex로 변환하면 50 34 0D 0A 39 20 31 31
2) 한 줄을 표현하는 데 필요한 바이트 수 구하기
이미지 너비가 9이므로 P4 형식에서는 이미지 한 줄을 나타내기 위해 2바이트가 필요하다.
→ 9픽셀 = 1바이트(8픽셀) + 1바이트(1비트+패딩 8비트) = 2바이트
3) P1 데이터를 P4 데이터로 변환하기
PBM P1 이미지의 첫 번째 줄 데이터 0 0 0 0 1 0 0 0
를 P4형태로 변환하면 아래와 같다.
00001000
00000000
한 줄의 데이터를 표현하는 데 2바이트를 사용한다.
여기서 실질적으로 사용되는 비트는 첫 번째 블럭의 8비트 데이터(00001000)와 두 번째 블럭의 첫번째 비트(0) 이다.
두 번째 블럭의 나머지 7비트는 색상을 나타내는데 사용되지 않고, 자리수를 채우기 위한 패딩 비트이다.
위 방식대로 PBM P1이미지를 P4형식으로 변환하면 아래와 같다.
PBM P1에서는 이미지를 표현하기 위해 217byte를 사용하지만, PBM P4에서는 이미지를 표현하기 위해 30 byte를 사용한다.
참고
http://paulbourke.net/dataformats/ppm/
https://www.fileformat.info/format/pbm/egff.htm