VB.NET2005 TIPS / グラフックス系 |
G0302 文字の自由変形 |
最終更新:2006/11/12 再掲 |
●解説
非線形変換の一種であるWarpを使い、任意の四角形の中に文字列を描画する。
●原理
Warpは原型である矩形を、任意の4点で囲まれた四辺形に変換するものである。下図参照。捩れも指定できるが、結果は予測できないので避けた方が良い。但し、反転(例えば、P0、P1をP2,P3より下にすれば上下反転となる)は構わない。デスティネーションの四辺形はPoint配列で、その順序が決まっている。P3がなければ、平行四辺形として処理される。
●方法
WarpはDrawではなく、GraphicsPathに対する座標変換メソッドである。以下の手順で実施する。
-
文字列をGraphicsPathにする
-
そのパスの外接矩形を求める
-
変形後の点を設定し、順序と原型との点との関係を注意して配列にする
-
パスに対してWarpメソッドを施す。この時、パスの外接矩形が必要となる。
-
パスを描画する。これでWarpされた文字が描かれる。
●事例
gはGraphicsとする。FはFontとする。dsは変形したい文字列とする。
Xc、 Ycは文字列の基準点とする。
posはPointF()で、変形後の4点が入っているとする。
fmt.Alignment
= StringAlignment.Center
fmt.LineAlignment = StringAlignment.Center
Dim pa As New GraphicsPath()
Dim re As RectangleF
pa.Reset()
pa.AddString(ds, New FontFamily("MSPゴシック"), CInt(FontStyle.Regular),
f.GetHeight(g), New PointF(Xc, Yc), fmt)
pa.CloseFigure()
re = pa.GetBounds
‘パスの外接矩形を求める
pa.Warp(pos, re)
g.FillPath(Brushes.Red, pa)
pa.Dispose()
上記コードでWarpした結果
|