ソフトウェア実験室 |
文字の数値化 |
最終更新:2006/10/31
新規 |
TT(ツルータイプ)フォントはベクトルで表現されている、基本的には制御点やスプライン曲線などの集まりである。これが、描画される場合は、ポリゴン(点集合)に変換される。曲線がどの程度の点集合になるかは、描画サイズなどで決められる。
ここでは、フォントの最終形態である点集合の状態を実際に確認する。これらは、フォントに数学的な座標変換を施して、変形させる場合などに必要な情報となる。
●原理/方法
フォントが描画される直前の状態のポリゴンを以下のようにして得る。
- その文字をPathオブジェクトにする。
- Path(曲線群)をFlattenメソッドで線分に変換する(これにて、ベクトルから線分となる)。
- 線分化されたPathの点集合をPathPointsプロパティで得る。
- 得られたポリゴンの節点の型を、PathTypesプロパティで得る。
●PathTypes
一般に、文字は複数の閉曲線の集合体となる。このとき、閉曲線を区別するためにPathTypesがある。これは、ポリゴンの節点単位で、その節点の性質を表したバイト配列となっていて、以下のようである。
- 0 :始点
- 1 :中間点
- 129:終点(中空になる部分と思われる)
- 161:終点(土台部分と思われる)
この情報は、PathPointsから再び文字として見えるようにするために必要な重要情報となる。
●結果
PathPointsとPathTypesを列挙したもの。番号は点の番号、X、Y は、点の座標、Path Typeは節点の名称と、PathTypesの値。
○最も単純な漢数字の一の例(文字高は180)
MS Pゴシックの場合 |
MS P明朝の場合 |
MS Pゴシックの場合、単なる矩形となっているが、明朝の場合、飾り(シェリフ)があるので、複雑になっている。
○漢字の田の場合
中の4つの四角い空洞と外側の外形とから構成されている。
●実験のサンプルコード例
以下のコードで今回の実験で必要な情報は全て得られる。文字をパス化するには、全ての属性を、具体的に指示しないといけない(描画と同じ)。
txtCは実験の文字を指定するテキストボックス
cHは文字の高さ
Dim cH As Single = XXXXXX
Dim fmt As New StringFormat()
fmt.Alignment = StringAlignment.Near
Dim pa As New GraphicsPath()
pa.Reset()
pa.AddString(txtC.Text, txtC.Font.FontFamily, CInt(FontStyle.Regular), cH, New
PointF(0, 0), fmt)
pa.CloseFigure()
pa.Flatten()
Dim pps() As PointF = pa.PathPoints
Dim pt() As Byte = pa.PathTypes
|