QRコードをつくってみる4
QRコードでは1モジュール1bitを意味するので先に得られたコード語列を
2進化しそれぞれ所定のモジュールに配置します。
なおRSブロック(表5)が2つ以上の
場合はデータをインターリーブ配置する必要がありますが、
サンプルの1-H型は不要なので説明を省きます。
また位置検出パターンおよびタイミングパターンは各バージョンで固定なので
あらかじめ配置しておきます。
・配置のルール
1、一番左上を(0,0)としi行j列(i,j)の座標系を考えます。
例えばサンプルのバージョン1では(0,0)〜(20,20)です。
2、スタートは右下とします。
サンプルでは(20,20)からスタートですのでここにデータ(0 or 1)
を配置します。
3、上下の進行方向を決めておきます。最初の進行方向は上です。
4、幅2つ分を基準とします。
幅2つ分のうち右側にいるとき...
ひとつ左に移動することを試みます。
あいていればそこに移動し次のデータを配置します。もし固定の
パターン等で埋まっていたら現在の進行方向(上または下)へ1つ
移動しデータを配置します。
幅2つ分のうち左側にいるとき...
そこより現在の進行方向側に空きがあるか確認します。
空きがあれば現在のモジュールに上下方向で最も近くかつ幅2つのうち
右側に優先してデータを配置します。
もし進行方向に空きが無ければ一つ左方向へ移動しそこにデータを配置
します。またその時進行方向を今までの逆にします。
・配置の具体例
上記の説明ではややわかりにくいので具体例をあげます。
仮に"01234567 89ABCDEF GHIJKLMN"というデータがあり(実際には0か1しかないが..)
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列がすでに固定パターン"*"で埋まっている場合、
"01234567 89ABCDEF"というデータを配置する場合は...
| 9 | 8 | 7 | 6 |
| A | * | * | 5 |
| B | * | * | 4 |
| C | * | * | 3 |
| D | * | * | 2 |
| F | E | 1 | 0 |
となります。
この配置のルールで先ほど得たデータを2進化し各ビット毎のデータを
各モジュールに割り振ります。
下図は位置検出パターン・タイミングパターン・サンプルのデータを割り振った
直後の状態です。