2011-07-06 4 views
3

I次のコードを持っている:のDrawStringとDrawRectangleは異なる場所に同じX&Yスタートを使用して

public void DrawLetter(int Cell, string Letter, int X, int Y) 
{ 
    System.Drawing.Font fBody = new System.Drawing.Font("Courier New", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); 

    Pencil.DrawString(Letter, fBody, System.Drawing.Brushes.Black, X, Y); 
    Pencil.DrawRectangle(new Pen(System.Drawing.Brushes.Red), X, Y, 10, 10);   
} 

私は二回、この通過し、矩形が私は期待通りに表示された座標として140249と296249を使用します正しい位置が表示されますが、文字列は数ピクセルしか表示されず、なぜ動かすことはできません。

私は、DrawRectangleを正しい位置から開始していることを確認するために配置しました。私はDrawStringで何か間違っているのですか?また、私はDとZを描画する場合、Dの幅は10pxであり、Zは8pxです。Courierを使用すると固定幅になると思いますか?

更新:私はMSDNのサンプルを見て、ここではスクリーンショットです。 DrawStringは0,0に配置されていますが、文字が0,0に表示されないことがわかります。しかし、長方形はします。パディングか何かがあるに違いありません:

Screenshot

UPDATE 2:次のコードを使用するには、その完璧ではないものの、物事を改善するようだ:

StringFormat strFormat = new StringFormat(StringFormat.GenericTypographic); 
Pencil.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; 
Pencil.DrawString(measureString, stringFont, Brushes.Black, new PointF(0, 0), strFormat); 

Screenshot 2

+0

MSDNのリンクによると、「MeasureStringメソッドは、個々の文字列で使用するように設計されており、文字列の前後に小さな余分なスペースが含まれているため、グリフがオーバーハングすることがあります。また、DrawStringメソッドは、グリフポイントを調整して表示品質を最適化し、MeasureStringによって報告された文字列よりも狭い文字列を表示することがあります。 'それで、文字列描画中にシステムオフセットがあるようです。 – Allender

答えて

0

それはないだろう"Courier New"フォントのために考慮されるデフォルトのパディング/行の高さなどですか?

+0

私は知らない、私はこれにかなり新しいです。どのように戦うのですか? – Jon

+0

私はあなたができることを確信していません、それぞれのフォントの描画は、フォントの実装に応じて、テキストの周りのある程度の空白を招きます。元の座標に適切な正/負のオフセットを計算して、テキストをどこに描画するかを決定する場合があります。また、あなたが見ているものを明確にするためにスクリーンショットを撮って問題を示すことができれば助けになります。 –

+0

更新された質問を見る! – Jon

関連する問題