首先,我知道这篇文章: Pixel behaviour of FillRectangle and DrawRectangle。但它并没有完全解决我的问题。
让我们从长度为3的正方形开始,如下所示:
RectF rc(0, 0, 3, 3);
如果我使用Graphics::FillRectangle()
填充此矩形,那么我会得到一个3 x 3像素的正方形,如下图所示,带有2个小白方块:
如果我然后尝试使用Graphics::DrawRectangle()
在这些正方形周围绘制边框,并提供与我填充时使用的完全相同的矩形,我会得到一个覆盖4 x 4像素的边框,从而在视觉上通过右侧和底部的像素:
我被理解这是因为FillRectangle()没有绘制右边或底边。我无法找到有关其行为方式的任何文档。
如果我然后将Graphics::SetClip()
带入等式,并将剪切区域设置为我在之前的2个测试中使用的同一个矩形,我得到以下内容:
所以,现在裁剪区域似乎忽略了右边缘和底边缘,就像FillRectangle()
所做的那样,这看起来很愚蠢DrawRectangle()
。{/ p>
有人可以帮助我理解应该如何解释所有这些不一致吗?
答案 0 :(得分:1)
FillRectangle
和SetClip
忽略右边和底边,因为这是Windows中矩形的定义;它是两个开放范围,其中包括起点但终点不包括。这意味着您可以轻松定义空矩形,其中top = bottom或left = right。这也意味着如果一个矩形的顶部是另一个矩形的底部,那么这两个矩形将完美地相遇而没有重叠。
DrawRectangle
是不同的,因为它定义了一个带有4个边并绘制这些边的多边形。