とある事情により今回は文字の輪郭をビットマップで取得するプログラムを作成します。

ビットマップを用意して白で塗りつぶします。そしてここに文字を描画します。各ピクセルを調べて白ではない部分が文字の部分です。そのなかで上下左右のどこかが白であればそれが輪郭部分であるとわかります。

文字はMS Pゴシック 72ポイントで描画します。そこでそれだけの描画が可能なビットマップのサイズを調べます。文字列が何行か、一行は最大何文字であるかを調べ、これに100を掛けて50を足しています(かなりいい加減)。

コンストラクタのなかで文字を書き、輪郭部分の位置を求めるところまでやってしまいます。OutlinePointsプロパティで座標のリストを取得できるようにします。またStringPointsプロパティで輪郭部分だけでなく文字全体の座標のリストを取得できるようにしました。

それから輪郭部分の座標のリストを取得しても点の順番が違うとこれを元に文字の輪郭の描画ができません。そこで輪郭部分の座標のリストを取得したあと、実際にビットマップ上にこれを描画します。そして白ではない点を一点求めてそこから連続して繋がっている点をリストのなかに格納していきます。このリストのリストが輪郭を構成する点の集まりとなります。

文字は中途半端な座標に描画されているので、上と左を詰めます。取得されたリストの各点の座標が左と上になっている部分(X座標とY座標それぞれの最小値)を取得すれば、左と上の空白部分が何ピクセルかがわかります。それだけ座標をずらしたものを返します。

輪郭部分だけでなく文字全体の座標のリストも取得します。

また縦横のピクセル数もわかるようにしました。

実際に使ってみます。ボタンを押すと文字列の輪郭だけが描画されたビットマップデータがクリップボードに転送されます。