どのように私は別の方向でのフォントの高さを指定するのですか?

StackOverflow https://stackoverflow.com/questions/929801

質問

GDIとフォントを作成する一般的な方法は、このような所望のポイントサイズとターゲットデバイスの垂直方向の解像度(DPI)を使用することです

LOGFONT lf = {0};
lf.lfHeight = -MulDiv(point_size, GetDeviceCaps(hdc, LOGPIXELSY), 72);
...
HFONT hfont = CreateFontIndirect(&lf);

デフォルトのMM_TEXTマッピングモードを仮定すると、これは、所望のデバイスのための画素高さにPOINT_SIZE変換します。 (これは72.27ポイントはインチではなく72に実際にあります。一般的な近似である)(マイナス記号は、私が実際の文字の高さではなく、セルの高さを指定することを意味します。)

私が横にフォントを作成する場合 - つまり、90度の向きとエスケープメント付き1 - 私はLOGPIXELSXではなくLOGPIXELSYを使用していますか?私がターゲットにしていたプリンタのいくつかのために、水平方向と垂直方向の解像度が異なっています。

私はthetaの角度をしたい場合は、

一般的に、私はLOGPIXELSXLOGPIXELSY兼ね備えていますか?私はこのような何かを考えています:

// Given theta in degrees (e.g., theta = 45.0) ...
double theta_radians = theta * 2.0 * pi / 360.0;
int dpi = static_cast<int>(GetDeviceCaps(hdc, LOGPIXELSX) * sin(theta_radians) +
                           GetDeviceCaps(hdc, LOGPIXELSY) * cos(theta_radians) +
                           0.5);
LOGFONT lf = {0};
lf.lfHeight = -MulDiv(point_size, dpi, 72);
// Set escapement and orientation to theta in tenths of a degree.
lf.lfEscapement = lf.lfOrientation = static_cast<LONG>(theta * 10.0 + 0.5);
...

これは私には直感的に理にかなっているが、これはGDIフォントマッパーとプリンタドライバがどのように動作するか本当にあるならば、私は思ったんだけど。

正しい解決策はありません

他のヒント

1)72ポイント/インチがあります。 (それが72.27であることが使用されるが、変更されました。) 2)あなたのやり方でLOGPIXELSXとLOGPIXELSYを組み合わせることで結構ですが、 フォントをマッピングするとき3)フォントマッパーは、脱進機と方向を見ていません。 LOGPIXELS値は、座標変換の一部として使用されます。

http://msdn.microsoft.com/en-私たち/ライブラリ/ ms969909(loband).aspxの

声明は、多くの可能なドライバやプリンタを含めることができますので、「プリンタドライバが動作する」方法について。

このわかりません

これらは非正方形に伸び、その後、正方形ピクセルにラスタライズすることができました。彼らは、グリフの曲線を変換することができます。彼らは何かを行うことができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top