2011-07-06 32 views
3

我有以下代碼:束帶和使用相同的X&Y開始在不同的地方的DrawRectangle

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

更新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

相關問題