关于 class CRect & Rect,宽度 = 右 - 左

About class CRect & Rect, Width = right - left

是C++和mfc的问题。 比如left = 3,right = 8。那不是说从左到右有6个像素点吗?为什么宽度=右-左?如果我知道代表图像矩形的矩形,当我为图像数据分配内存时,我应该使用哪个? Width = right-left,还是 Width = right-left+1?我是图像处理的初学者。这真的让我很困惑。感谢您的帮助!

如果我们谈论的是 CRect 和 RECT,那么 documentation 就很清楚了。

按照惯例,矩形的右边缘和下边缘通常被认为是独占的。换句话说,坐标为 ( right, bottom ) 的像素紧靠在矩形之外。例如,当 RECT 传递给 FillRect 函数时,矩形被填充到但不包括右列和底行像素。此结构与 RECTL 结构相同。

这里就用到了"inclusive lower bound, exclusive upper bound"的原理。所以元素个数永远是边界之间的差值。

另一种思考方式是,矩形的宽度是从左到右的距离度量。当左等于右(例如:左=1,右=1)时,它们之间的距离为零(注意距离可以为负数)。

当使用 RECT 表示像素坐标时,我们通常想知道从左到右的像素数 count。当左等于右(例如:左 = 1 和右 = 1)时,我们知道在 left/right 方向上只有一个像素。没有 pre-made 函数来计算此 count,因此您需要取宽度的绝对值并加 1。

在C/C++:

        int count = abs(myRect.right - myRect.left) + 1;