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