나는 다음과 같은 코드를 가지고 :하여 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에 나타나지 않습니다. 그래도 사각형은 작동합니다.
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);
을
MSDN 링크에 따르면 : MeasureString 메서드는 개별 문자열과 함께 사용하도록 설계되었으며 돌출 된 글리프를 허용하는 문자열 앞뒤에 약간의 여유 공간을 포함합니다. 또한 DrawString 메서드는 글리프 지점을 조정하여 표시 품질을 최적화하고 MeasureString에서보고 한 것보다 좁은 문자열을 표시 할 수 있습니다. '문자열 그리기 중에 시스템 오프셋이있는 것 같습니다. – Allender