2011-07-06 2 views
3

나는 다음과 같은 코드를 가지고 :하여 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