Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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# System.Drawing.Graphics.DrawRectangle绘制大于指定值1px的矩形_C#_Winforms_Graphics_Gdi+_Gdi - Fatal编程技术网

C# System.Drawing.Graphics.DrawRectangle绘制大于指定值1px的矩形

C# System.Drawing.Graphics.DrawRectangle绘制大于指定值1px的矩形,c#,winforms,graphics,gdi+,gdi,C#,Winforms,Graphics,Gdi+,Gdi,这里的代码非常简单……只需在表单的OnPaint例程中绘制一个64x64矩形即可: protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); e.Graphics.DrawRectangle(Pens.Black, new Rectangle(32, 32, 64, 64)); } 我拍摄了下面的屏幕截图,并测量了正方形,它是65x65 只是想知道是什么原因导致额外的1px宽度/高度,以及如何修复

这里的代码非常简单……只需在
表单的
OnPaint
例程中绘制一个64x64矩形即可:

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    e.Graphics.DrawRectangle(Pens.Black, new Rectangle(32, 32, 64, 64));
}
我拍摄了下面的屏幕截图,并测量了正方形,它是65x65

只是想知道是什么原因导致额外的1px宽度/高度,以及如何修复

编辑…


我知道我可以使用
矩形进行修复。充气(-1,-1)
…更重要的是,我想知道为什么GDI/GDI+会使矩形比指定的宽/高1px,在这种情况下,请给出使用
充气
修复的原因。

每个边框边缘的中心都绘制在矩形实际边缘的左侧或下方。对于单像素边框,上边缘和下边缘绘制在矩形实际边缘的下方。如果在窗体顶部绘制这样一个矩形,则该矩形的顶部为0,并且在0像素和1像素之间的空间中绘制上边缘。如果该矩形的高度为64像素,则底部为64像素,底边绘制在64像素和65像素之间。如果将笔的厚度设置为2,则会发现底部边缘的另一半绘制在63到64像素之间。垂直边也是一样,即第一个奇数像素向右绘制,偶数像素向左绘制。

@Steve在Windows Paint中使用选择矩形,因此,选择矩形正好适合矩形。我认为造成额外宽度的原因是笔的宽度,我认为笔的宽度添加到了您在矩形中给出的尺寸中。从矩形(1,1,1,1)和SysInternals的ZoomIt实用程序开始,这样您就可以很容易地看到它。用一张图表纸复制它,把你的笔放在一个单元格里,移动一个像素。现在可以很容易地推断出结果是2x2黑点。现在尝试Graphics.FillRectangle()并观察差异。或者,更简单地说:矩形的宽度是从钢笔宽度的中间测量的。@TaW,简单性被高估了。;-)