这里的代码非常简单...只是在 OnPaint
例程中为 Form
绘制应该是 64x64 的矩形:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawRectangle(Pens.Black, new Rectangle(32, 32, 64, 64));
}
我截取了以下屏幕截图,并测量了 65x65 的正方形。
只是想知道是什么导致额外的 1px 宽度/高度,以及如何解决?
编辑...
我知道我可以使用 Rectangle.Inflate(-1, -1)
修复...更重要的是,我想知道为什么 GDI/GDI+ 渲染矩形 1px 宽/高指定,并在此上下文中给出使用 Inflate
修复的原因。
最佳答案
每个边框边缘的中心绘制在矩形实际边缘的左侧或下方。对于单像素边框,顶部边缘和底部边缘绘制在矩形的实际边缘下方。如果您在表单顶部绘制这样一个矩形,则该矩形的顶部为 0,顶部边缘绘制在 0 像素和 1 像素之间的空间中。如果该矩形的高度为 64 像素,则 Bottom 为 64,底部边缘绘制在 64 像素和 65 像素之间。如果将笔的粗细设置为 2,那么您会发现底边的另一半绘制在 63 到 64 像素之间。垂直边缘也是如此,即第一个奇数像素向右绘制,偶数向左绘制。
关于c# - System.Drawing.Graphics.DrawRectangle 绘制比指定大 1px 的矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26201289/