6

Web サイトで「Web ページをビットマップとして保存」機能を作成しようとしていますが、サーバー側でテキストを正しいサイズでレンダリングする際に問題が発生します。

クライアント上のテキストのフォントサイズ設定は次のとおりです。

.textDiv
{
    font-family: Verdana;
    font-size:16px;
}

これをサーバーでレンダリングしようとすると

float emSize = 16;
g.DrawString("mytext", new Font("Verdana", emSize), Brushes.Black, x, y);

サーバー上でテキストが約 20% 大きくなります。

new Font()のドキュメントによると、2 番目の引数 (フォント サイズ) は em ポイントで指定する必要があります。1 つの em ポイントとは正確には何ですか?

ブラウザで font-size:16em を指定すると、テキストが巨大になります。ブラウザで font-size:1em を指定すると、テキストは約 14px になりますが、サーバーで引数として 1 を指定すると、テキストは細い線になります。

では、ブラウザの px または em から .net px/em に変換するにはどうすればよいですか。

4

2 に答える 2

4

実際、ドキュメントには「em-point」ではなく「em-size」と書かれています(「新しいフォントのem-size、ポイント単位」)。サイズをポイント単位で指定するよう求めています。1 インチあたり 72 ポイントがあります。ユーザーの画面の DPI と描画しているキャンバスの DPI を計算し、16px のサイズにその比率の差を掛ける必要があります。

例えば

(CSS_Font_Size_Pixels * Canvas_DPI) / (User_Screen_DPI * 72) = Equivalent_Point_Size

GraphicUnit を受け取り、Pixels を指定する Font コンストラクターのオーバーロードを使用することで、数学演算を節約できます。このように、適切なサイズは次のようになります。

(CSS_Font_Size_Pixels  / User_Screen_DPI) * Canvas_DPI
于 2009-01-27T20:21:18.173 に答える
0

質問で2つの異なる測定単位を使用しているため、少し混乱しています。私は両方を説明しようとします:

PX

これはピクセル単位の高さです。これは、フォントを設定するのと同じくらい簡単なはずです。

new Font("Verdana", 16F);

EM

これはラインの高さの倍数であるため、これを制御するのははるかに困難になります。たとえば、1em = 14pxの場合、16em =(14 * 16)pxです。線の高さがわからない限り、これを再現するのは困難です。

また、ドキュメントには次のように書かれています

新しいフォントのem-size(ポイント単位)。

したがって、使用しているコンストラクターのPXまたはピクセルで定義されます。このコンストラクターを試すこともできますが、EMは実際にはブラウザー/ CSSの実装であり、ほとんどベクターのように、画面に応じて動的に調整されます。ここで、Fontオブジェクトは、描画するピクセル数を処理するビットマップです。

http://msdn.microsoft.com/en-us/library/ms141986.aspx

于 2009-01-27T18:11:36.860 に答える