我有以下代碼:束帶和使用相同的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處。矩形雖然。必須有填充或東西:
更新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);
根據你的MSDN鏈接:'MeasureString方法被設計用於單個字符串,並在字符串之前和之後包含少量額外空間以允許懸垂字形。此外,DrawString方法調整字形點以優化顯示質量,並可能顯示比MeasureString報告的字符串更窄的字符串。 '所以,看起來你在繪製字符串時有系統偏移量。 – Allender