午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

Visual Basic 2010 Express DrawStringでのフォントによる描画位置の違い

イメージ 1

フォントによる描画位置の違い

Visual Basic 2010 Express
 SizeF = g.MeasureString(iString, iFont, New PointF(0, 0), sf)
 
GraphicsのMeasureStringを使って描画する文字列の大きさを測って
そこにx,y=0,0で描画するとほとんどのフォントが上にずれたようになり
下側に隙間ができる
Aldhabiというフォントは日本語だと下側に全体の半分以上の空間ができる
今のところはこのズレをフォントによる違いを考慮していなくて
フォントサイズの1/10のピクセル下にずらして描画している
イメージ 2
ほとんどのフォントはこれで問題ないんだけど
WindowsXPの時にはなかったMeiryo UIは修正しなくてもほぼ中央に
なっているから逆にずれてしまう
ってことで調べているところなんだけど思っていた以上に複雑
 
参照したところ
VB.netで文字を正確な位置に描く。 - 情報と音楽
 
方法 : フォント メトリックを取得する
 
フォント一覧、1055x12121ピクセルの画像
イメージ 3
1055x12121はヤフーに蹴られた模様

2分割で
keyのkで上に突き出た部分、yで下に突き出た部分の表示位置の確認
フォント名で日本語の表示位置の確認

f:id:gogowaten:20191014144235p:plain

 
 
分割

f:id:gogowaten:20191014144256p:plain