0

C#で文字列を描画する際に問題があります

これが私のコードです:

Graphic.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
Pen pen = new Pen(brush, 2f);
Font font = new Font("Segoue UI", 15);
graphic.DrawString("2", font, brush, new PointF(0f, 0f));

以前は、picturebox を作成し、そこからグラフィック オブジェクトを作成しました。問題は、「2」が (0;0) ではなく (4;5) に描画されていることです。アンチエイリアスをオフにした場合のイベントはまだ (4;5) にあります。

(0;0) から (200;0) までと (0;0) から (0;200) までの 2 本の線を描画してチェックし、それらに従って文字列を描画する際のエラーを計算しました。

理由はありますか?正確な位置にひもを引く必要があります。

//編集私もこの方法でフォントを設定しようとしていました:

Font font = new Font("Microsoft Sans Serif", 10);

(0,0) に "2" を描くと、"2" の実際の位置は (3,3) になります。描画 "1" エラーは同じです (3;3)。

4

2 に答える 2

1

Graphics.DrawString文字列を描画するために使用するボックスを自動的にパディングしています。その理由は、コントロールのラベル テキストなどを描画することが目的であり、そのため「既製」であるため、テキストの周りにパディングがあるためです。

Microsoft は最終的に、このアプローチは、より正確なテキスト描画 (テキスト エディターなど) が必要な状況には最適ではないことに気付き、そのためTextRendered、GDI+ の代わりに GDI をラップして「古い」ものを返すクラスを開発しました。正確な弦の描画。

試す:

TextRenderer.DrawText(e.Graphics, "2", font, new Point(0, 0), brush);

これでもパディングが発生する可能性がありますが、ここではより確実にそれを補うことができます。以下のリンクをチェックして、メソッドで使用できるフラグを確認してください。

注: テキストを測定する必要がある場合は、 を使用することが重要TextRenderer.MeasureText()です。

詳細については、http:
//msdn.microsoft.com/en-us/library/system.windows.forms.textrenderer.aspxにアクセスしてください。

フラグ:
http://msdn.microsoft.com/en-us/library/w3cdh3zw.aspx

于 2013-01-09T22:45:50.003 に答える
0

「文字列」に ag や aj のような降順の文字がある場合はどうなりますか? 各フォントは文字の降順部分を許可するため、フォントのメトリックを調べてそれを考慮する必要がある場合があります

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

于 2013-01-09T19:23:06.860 に答える