御質問がありましたので、データをどのように作成しているかを説明したいと思います。
自分用なので、かなり面倒くさく手間と時間がかかります。
1.文字データ作成.exeを実行する。
文字データ作成.exeをダウンロード(5k)
2.白部分をクリックしてデータを作成したい漢字を一文字入力する。
3.KANJI.bmpが作成されるので、そのファイルを右クリックして、
プログラムから開く - Paint でペイントで開きます。
4.ここからペイントを使って手作業でデータを作成します。
図1
今回は「予」を作成してみます。
下図のように境界線をペイントの直線を選択して引きます。
境界線以外は実際には書き込む必要はありません。
図2
白抜きの数字は領域番号、赤の数字は境界線の番号です。
データ作成は2000用ならKanjiData2000.txt、
98/ME用ならKanjiData.txt、XP用ならKanjiDataXP.txtを編集します。
データ構造は次の通りです。
------------------------------
カテゴリNo
漢字名,境界線の数,領域の数,画数,特別点があるか(あるなら点の数、ないなら0)
特別点1が塗られる画数,特別点1のX座標,特別点1のY座標
特別点2が塗られる画数,特別点2のX座標,特別点2のY座標
・
・
境界線1の始点X,始点Y,終点X,終点Y
境界線2の始点X,始点Y,終点X,終点Y
・
・
・
領域1内のある点AのX,領域2内のある点BのX,…
領域1内のある点AのY,領域2内のある点BのY,…
・
・
・
一画目で塗りつぶす領域数,二画目で塗りつぶす領域数,…
一画目での書き始め判定,二画目での書き始め判定,…
-------------------------------
XP用のデータはXP上で、2000用のデータは2000上で、98/ME用のデータは
98/ME上で作成する必要があります。同じフォントでもOSごとで文字の形が
微妙に変わるからです。
XPの「予」のデータはこのようになります。
「予」には特別点が無いので、特別点の座標などのデータ設定行は不要です。
3
"予",3,4,4,0
207,113,224,129
199,156,231,156
192,174,223,174
269,209,197,207
74,139,166,294
1,1,1,1
2,2,1,2
データの最終行は書き出し判定方向(0:無判定 1:左 2:上 3:右 4:下)です。
クリックした座標とその領域番号内のある点の座標を比較します。上の「予」の場合、
5、6行目で設定した座標とクリックした点の座標を比較します。
たとえば2ならばクリックした座標が領域内のデータ設定したある点より
上で無いと間違いになります。
クリックした場所が正しいかどうかは領域番号で判断します。
領域番号は塗りつぶす順番どおりに設定しないといけません。
ただし領域番号だけで正解判定を行うと、図2の場合、3画目で
領域番号3をクリックすると正解になりますが、領域3の右端を
クリックして正解となるのは違和感があります。領域3の中の左側を
クリックしたときだけ正解にするために、データの最終行で
書き出し判定のデータを設定します。(書き出し判定はメニューで
書き出し判定を厳しくするのチェックをオンにしたときだけ
動作します)
領域番号3のある点を縦棒との交点の左辺りに設定し、判定方向を1にすれば、
3画目で領域番号3の中の縦棒より左側の部分をクリックしたときだけ
正解になります。
書き出し判定をそれ用の境界線を加えるのではなく、領域内の点の座標との比較を
用いるのは、判定用に境界線を加えると境界線が増えすぎて、データの作成が
大変になるからです。
境界線は終点座標が描写されないことに注意して引きます。このことを忘れると
領域間に境界線の隙間がうまれ、塗りつぶしたときに余計な領域まで塗りつぶされて
しまうエラーが発生します。
あと、境界線がX、Y方向に±1ドットずれても対応できるように注意します。
例えば、始点と終点が1ドット左にずれる、または1ドット上かつ1ドット右にずれる
といった場合にも隙間ができないように境界線を引く必要があります。
そうしないと理由は分かりませんが、塗りつぶしがあふれてエラーになることが
あります。
特別点はどういう場合に必要かというと、境界線がぶつかるときです。境界線の交わる点を
特別点で塗りつぶします。そうしないと塗りつぶすときに不都合が生じるからです。
たとえば「科」には特別点をひとつ設定していますが、その点を無くすと、
図3
このように余計な境界線が表示されてしまいます。境界線が交わったり接したり
する場合、特別点を設定しないと、図3のようになってしまうのです。
簡単ですが、以上でデータ作成の説明を終了します。
-------------------------------------------------------
追記(2006/6/27)
スクリーンフォントを滑らかにするのチェックの有無で文字の表示が
微妙に変わりますので、ひとつのOSのデータはオンかオフに統一して
データを製作しないといけません。オフで製作したデータをオン状態で
使用する、またはオンで製作したデータをオフ状態で使用するとエラーに
なることがあります。[スクリーンフォントを滑らかにする]のチェックは
「コントロールパネル」-「画面のプロパティ」-(「デザイン」)-「効果」
で出る画面でオンかオフか分かります。
・境界線の取り方の補足
境界線の座標の取り方が悪いと青で塗りつぶされる、余計な場所まで塗り
つぶされる等のエラーが発生します。境界線の取り方を説明します。
図4
図5
図4のように境界線を引きたい場合、図5のように始点S、終点Eを
取るのがベターです。直線は上下左右1ドットずれて描画されるときが
あるので、もし点Sを図5より右に1ドットずれた所で取ると、場合に
よっては隙間が出来てしまいます。しかし図5のように点Sを置けば、
上下左右どのように1ドットずれても隙間ができないので、エラーは発生しません。
次に終点の取り方ですが、終点の座標は実際には描画されません。図5でいえば、
点Eの紫の点は実際には描画されず、その点の1つ手前の点、図5では点Eの1ドット
左の点までしか実際には描画されません。その事と、始点のときと同じように上下左右
1ドットずれても隙間ができないように点をとることを合わせて考えて、終点Eをとる
必要があります。図5では2ドット右に突き出すような形で境界線を取っています。
もし1ドットしか右に突き出していない場所にとると、終点は描写されないので、場合に
よっては隙間が出来てしまうからです。この点に注意すれば、境界線座標が正しく
取れます。
・領域の取り方の補足
図6(緑の線は境界線です)
領域内の点のデータの書く順番は正しい筆順でクリックしたときにつぶされる順番で
書かないといけません。図6の白抜きの数字の順番です。境界線のデータの書く順番は
領域の場合と違い、決まりはありません。
図6では8画で11個の領域を塗りつぶします。2、3、7画目で2つの領域を
塗りつぶすので、
1,2,2,1,1,1,2,1
が正しい塗りつぶし領域数のデータとなります。
・特別点についての補足
図6の領域8,10,11の間の2本の境界線はくっついています。このような時、
特別点をつける必要があります。
図7(図6の特別点部分の拡大図)
図7においてS1、E1は横の境界線の始点、終点です。
S2、E2は縦の境界線の始点、終点です。
紫の点が特別点です。紫の点はS2より1ドット上に取っています。
この点を取ることにより、図3のようなエラーを避けることが出来ます。
境界線の座標の取り方で、始点と終点は1ドットどの方向にずれても
隙間が出来ないようしないといけないと言いました。図7ではS2に、
そのような対処をしていないように見えます。しかし、1つの漢字において、
全ての境界線のずれは全て等しくなります。たとえば、境界線が10個あって、
境界線1があるとき、右に1ドット、上に1ドットずれて描画されるとしたら、
10個の境界線全てが右に1ドット、上に1ドットずれます。ですから、
S2に関しては、隙間の考慮をせずに、座標をとることができます。
これを応用すると、
図8
この図のように、境界線が接しているのに特別点を取らないようにすることも
可能です。赤の点は右斜め下に向かう境界線の始点です。直線のずれはどの
境界線でも同じなので、ずれによりできる隙間を考慮する必要はありません。
トップページに戻る