System.Drawing.Graphics.DrawRectangle绘制比指定大1px的矩形

时间:2014-10-05 09:20:11

标签: c# winforms graphics gdi+ gdi

这里非常简单的代码...只需在OnPaint的{​​{1}}例程中绘制64x64矩形:

Form

我拍了下面的屏幕截图,并测量了方形,即65x65。

enter image description here

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

修改...

我知道我可以使用protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); e.Graphics.DrawRectangle(Pens.Black, new Rectangle(32, 32, 64, 64)); } 进行修复...更重要的是,我想知道为什么GDI / GDI +将矩形1px渲染得比指定的更宽/更高,并且在此上下文中,给出了使用Rectangle.Inflate(-1, -1)修复。

1 个答案:

答案 0 :(得分:4)

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