QR코드 생성 방법 (4)
QR코드에서 1개의 단위는 1bit를 나타낸다. 전 단계에서 나온 결과를 바이너리 데이터로 변환한 후 이를 각 위치에 저장하면 된다. RS 블록이 2개 이상이라면 데이터를 인터리빙해서 저장해야 하지만, 예제 데이터는 그럴 필요가 없으므로 이 과정은 건너뛰겠다.
먼저 항상 고정되어 있는 "파인더 패턴"과 "타이밍 패턴"을 저장해 준다.
위치를 지정할 때의 규칙은 아래와 같다.
1. 좌표 평면으로 생각할 때, 왼쪽 상단을 (0,0)으로 한다.
예로, 버전 1에서는 좌표가 (0,0)부터 (20,20)까지 존재한다.
2. 데이터의 기록은 오른쪽 하단부터 시작한다.
예제 데이터는 (20,20)부터 시작하여 0 또는 1을 기록한다. (1이 색을 칠하는 값이다.)
3. 상하 이동 방향을 기억해 놓아야 한다. 처음에는 위로 진행한다.
4. 가로로 2칸을 채운 후 상하로 이동한다.
2칸 중 오른쪽 칸을 채우고 나서 왼쪽 칸을 봤을 때,
만약 비어 있다면 (고정된 패턴이나 버전 정보가 아니라면), 왼쪽 칸에 데이터를 넣는다.
그렇지 않다면, 상하 방향 중 기억된 방향으로 움직이고 난 후 데이터를 넣는다.
왼쪽 칸을 채우고 나서,
상하 방향 중 기억된 방향으로 움직였을 때 오른쪽 칸에 데이터를 기록할 수 있는지를 확인해야 한다. 가능하다면, 그 칸에 데이터를 기록하면 된다.
가능하지 않다면, 기억된 방향을 뒤집고, 왼쪽 칸으로 이동하여 작업을 계속한다.
예시
QR코드에 기록하는 데이터는 0 또는 1밖에 없지만, 설명을 위해 "01234567 89ABCDEF GHIJKLMN" 이라는 데이터를 6*4에 넣어야 한다고 하자.
D | C | B | A |
F | E | 9 | 8 |
H | G | 7 | 6 |
J | I | 5 | 4 |
L | K | 3 | 2 |
N | M | 1 | 0 |
같은 데이터에서, 중앙 4*2에 고정 패턴이 있다면 다음과 같이 된다.
9 | 8 | 7 | 6 |
A | * | * | 5 |
B | * | * | 4 |
C | * | * | 3 |
D | * | * | 2 |
F | E | 1 | 0 |
아래의 이미지는 데이터를 표시한 후 "파인더 패턴"과 "타이밍 패턴"을 추가한 것이다.