12

WinFormsユーザーコントロールがあり、現在のフォントの正確な水平方向の文字間隔を取得しようとしています。これは、等幅であると予想されます。

フォントのSizeプロパティがこの情報を提供しているように見えますが、明らかにポイント単位であり、ピクセル単位で作業しています。

var fontWidth = this.Font.Size;   // Returns em-size in points--not pixels

自分でフォントを作成する場合は、ピクセル単位を使用するように指定できます。しかし、私の場合、フォントはユーザーコントロールのプロパティを介して設定され、フォントがどのように作成されるかを判断できません。残念ながら、フォントのUnitプロパティは読み取り専用です。

既存のフォントがピクセル単位でメトリックを返すようにするにはどうすればよいですか?

4

2 に答える 2

7

System.Windows.Forms.Controlオブジェクトを使用する場合は、次のコードを使用できます。

using (Graphics g = this.CreateGraphics())
{
    var points = myFont.SizeInPoints;
    var pixels = points * g.DpiX / 72;
    MessageBox.Show("myFont size in pixels: " + pixels);
}
于 2013-06-21T08:30:48.133 に答える
6

MSDNの次の記事を参照してください。

方法:フォントメトリックを取得する

ピクセルを取得するには、変換式を使用します。

descentPixel = font.Size * descent / fontFamily.GetEmHeight(FontStyle.Regular);

単一のグリフメトリックの取得(.net)も参照してください。

于 2012-11-18T19:12:16.503 に答える