2014-10-05 83 views
2

非常简单的代码更大这里...只是画什么应该是在OnPaint常规64×64的矩形为FormSystem.Drawing.Graphics.DrawRectangle绘制矩形1px的非指定

protected override void OnPaint(PaintEventArgs e) 
{ 
    base.OnPaint(e); 
    e.Graphics.DrawRectangle(Pens.Black, new Rectangle(32, 32, 64, 64)); 
} 

我采取了以下屏幕截图,并测量了65x65的平方。

enter image description here

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

编辑...

我知道我可以使用Rectangle.Inflate(-1, -1)修复...更重要的是,我想知道为什么GDI/GDI +呈现矩形1px的宽/高比规定的,在这请给出使用Inflate修复程序的原因。

+0

你如何衡量? – Steve 2014-10-05 09:26:58

+0

@Steve在Windows Paint中,使用选择矩形,以便选择矩形恰好适合矩形。 – series0ne 2014-10-05 09:31:34

+0

我认为是什么导致额外的宽度是笔的宽度,我相信是添加到您在矩形中给出的尺寸。 – 2014-10-05 09:40:31

回答

2

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

+0

或者更简单一些:矩形的宽度是从笔的宽度中间开始测量的。 – TaW 2014-10-05 10:23:46

+0

@TaW,简单性被高估。 ;-) – jmcilhinney 2014-10-05 10:26:15