まめ畑

ゆるゆると書いていきます

C#で文字に関する事

C#で文字を扱うことについてメモ程度に。
文字といっても、コンソールに出すとかTextBoxに表示とかではなくフォームやPictureBoxに描画ということです。
PictureBoxに文字を書くにはDrawStringを使うんですが、こいつ縁取り出来ないみたいなんです。
なので、縁取りを出来るようなやり方を探したところDrawPathを使って書くとい方法があるらしい。


コードはこんな感じ。
初期化関係は省略。

まずは、DrawString

Graphics g;
Point p;            //表示位置
Brush b;            //文字色
Font f;             //フォント
g.DrawString("hoge", f, b, p);


次は、縁取り出来るようにする。

Point p;            //表示位置
Brush b;            //文字色
int size;           //文字サイズ

GraphicsPath gp = new GraphicsPath();
gp.AddString("hogege", new FontFamily("Arial"), (int)FontStyle.Regular, size, p, StringFormat.GenericDefault);
g.FillPath(b, gp);
g.DrawPath(Pens.Black, gp);

こうするといいんだけど、なんか表示された文字に違和感が。
線で囲んだ中を塗りつぶした感じ。
そして、かなり処理がもっさりした感じになった。
CPUの使用率も後者のほうがかなり高かった。


うまいこと文字の縁取りが出来るようにすることできないかな?
drawStringで出来たら幸せなんだけど。
要調査。


おまけ
表示する文字の長さと高さを取得する方法は簡単。

Size s;
Font f;

s = TextRenderer.MeasureText("hoge", f);

あとは、s.Widthやs.Heightで文字の長さや高さがわかる。