アプリケーションは、デバイス コンテキストでフォントが選択された後にのみ、物理フォントのフォント メトリックを取得できます。 フォントがデバイス コンテキストに選択されると、そのフォントはデバイスに合わせてスケーリングされます。 デバイスに固有のフォント メトリックは、デバイス単位と呼ばれます。
フォントの移植可能なメトリックは、デザイン ユニットと呼ばれます。 指定したデバイスに適用するには、設計単位をデバイス単位に変換する必要があります。 デザイン単位をデバイス単位に変換するには、次の式を使用します。
DeviceUnits = (DesignUnits/unitsPerEm) * (PointSize/72) * DeviceResolution
この数式の変数の意味は次のとおりです。
変数 | 形容 |
---|---|
DeviceUnits | DesignUnits フォント メトリックをデバイス単位に変換することを指定します。 この値は、DeviceResolutionに指定された値と同じ単位です。 |
DesignUnits | デバイス単位に変換するフォント メトリックを指定します。 この値には、文字の幅やフォント全体のアセンダー値など、任意のフォント メトリックを指定できます。 |
unitsPerEm を する | フォントの em の正方形のサイズを指定します。 |
PointSize | フォントのサイズをポイント単位で指定します。 (1 ポイントは 1/72 インチに相当します)。 |
DeviceResolution | 1 インチあたりのデバイスユニット数 (ピクセル数) を指定します。 一般的な値は、レーザー プリンターの場合は 300、VGA 画面の場合は 96 です。 |
この数式は、デバイス単位をデザイン 単位に変換するために使用しないでください。 デバイスユニットは常に最も近いピクセルに丸められます。 特にアプリケーションが画面サイズを操作している場合は、伝達されるラウンドオフ エラーが非常に大きくなる可能性があります。
デザイン 単位を要求するには、高さが unitsPerEm として指定論理フォントを作成します。 アプリケーションは、EnumFontFamilies 関数を呼び出し、NEWTEXTMETRIC 構造体の ntmSizeEM メンバーを確認することで、unitsPerEm の値を取得できます。