QA@IT

C# フォントの設定について

9567 PV

いつもお世話になっております。

フォントについてですが、縦長や横長のフォントを描画するには .NET の場合はどのよう方法があるでしょうか?

VC++ や API では LOGFONT構造体 の設定で実現できました。
.NET にも System.Drawing.Font.FromLogFontメソッドや System.Drawing.Font.ToLogFontメソッド などが用意されていますが、設定の方法がよくわかりません。

            Font font = new Font(fontFamily, emSize, fontStyle);
            LOGFONT lf = new LOGFONT();
            font.ToLogFont(lf);
            lf.lfHeight *= 2;
            font = Font.FromLogFont(lf);

また、System.Drawing.Graphics.ScaleTransformメソッドや System.Drawing.Drawing2D.Matrix.Scaleメソッドを使うと、フォントの縦方向や横方向の縮小、拡大が実現できますが、スケールを変更するため、文字列の描画位置がズレてしまします。
例えば、フォントを縦方向に2倍拡大したい場合、スケールも縦に2倍されるため、文字列の垂直位置の配置を StringAlignment.Near に設定するとこちらの意図した領域を超えた位置に描画されてしまいます。

            GraphicsState transState = graphics.Save();
            StringFormat sf = new StringFormat();
            sf.Alignment = StringAlignment.Center;
            sf.LineAlignment = StringAlignment.Near;
            graphics.ScaleTransform(1f, 2f,MatrixOrder.Append);
            graphics.DrawString("テスト", font, brush, rectangle, sf);
            graphics.Restore(transState);

なにか良い解決策があればよろしくお願い致します。

回答

ScaleTransformをする前にTranslateTransformを使用して左上の位置を原点に

してしまえばなんとかなります。

編集 履歴 (0)
  • Shuさん、回答ありがとうございます。色々試した結果、描画領域はそのままでフォントのスケールだけ変更したい場合は、ScaleTransformやTranslateTransform、更にはScaleTransformで設定したスケール値を元に描画領域の変更などを組み合わせると実現できました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。