Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用相同X&;的抽绳和抽绳矩形;我从不同的地方开始_C#_.net_Graphics_Drawing_System.drawing - Fatal编程技术网

C# 使用相同X&;的抽绳和抽绳矩形;我从不同的地方开始

C# 使用相同X&;的抽绳和抽绳矩形;我从不同的地方开始,c#,.net,graphics,drawing,system.drawing,C#,.net,Graphics,Drawing,System.drawing,我有以下代码: 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.Dr

我有以下代码:

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来检查它是否从正确的位置开始,并且它是正确的。我是不是在拉绳子的时候做错了什么?如果我画一个D和一个Z,D的宽度是10px,Z是8px,我想用Courier,它会给我固定的宽度

更新:我查看了上的示例,这是一个屏幕截图。即使抽绳位于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);

这不会是“Courier New”字体所考虑的默认填充/线条高度等,是吗?

我不知道,我对这一点很陌生。你是如何对付它的?我不确定你能不能做到,根据字体的实现,每个字体的绘图都会在文本周围产生一定程度的空白。这可能只是计算出与原始坐标的适当正/负偏移,以确定要在何处绘制文本的情况。如果你能用截图来说明问题,以澄清你所看到的内容,这也会有所帮助。@Jon:看来我最初的假设是正确的,你基本上看到的是渲染文本周围的填充/边距。尽管如此,它应该是一致的,只需加/减一个适当的偏移量就可以让它回到原来的位置。我不明白为什么它会这样做。它没有文档记录,如果你说在0,0处绘制,你不希望它出现在10,10处。当然,必须有一种方法根据您的MSDN链接指定不填充:
MeasureString方法设计用于单个字符串,并在字符串前后包含少量额外空间,以允许悬垂图示符。此外,DrawString方法会调整图示符点以优化显示质量,并且可能会显示比MeasureString报告的字符串窄的字符串所以,看起来在绘制字符串时有系统偏移。