C# 重新缩放矩形(顶部、左侧、底部、右侧)

C# 重新缩放矩形(顶部、左侧、底部、右侧),c#,rectangles,bounding-box,rescale,C#,Rectangles,Bounding Box,Rescale,原始问题: 我有一个大小为高x宽=(1500500)的图像I1,其大小调整为(500300) I1包含以坐标为特征的边界框(上、左、下、右) 当I1的大小更改时,如何重新缩放边界框的坐标?这些公式正确吗 double newTop = Math.Ceiling((top) * (double)pictureBox1.Height / (double)image1.Height); double newLeft = Math.Ceiling((left) * (double)pict

原始问题:

我有一个大小为
高x宽=(1500500)
的图像I1,其大小调整为
(500300)

I1包含以坐标为特征的边界框
(上、左、下、右)


当I1的大小更改时,如何重新缩放边界框的坐标?这些公式正确吗

   double newTop = Math.Ceiling((top) * (double)pictureBox1.Height / (double)image1.Height);
   double newLeft = Math.Ceiling((left) * (double)pictureBox1.Width / (double)image1.Width);
   double newBottom = Math.Ceiling((bottom + 1) * (double)pictureBox1.Height / (double)image1.Height) - 1;
   double newRight = Math.Ceiling((right + 1) * (double)pictureBox1.Width / (double)image1.Width) - 1;
一般来说:

尺寸按系数缩放(新尺寸)/(旧尺寸)

坐标有点复杂:

x2 = left2 + (x1 - left1) * width2 / width1
y2 = top2 + (y1 - top1) * height2 / height1
其中
left
width
等描述了整个图像的位置
x
y
描述正在转换的特征。在您的例子中,边界框的角是特征


如果
left1
left2
top1
top2
都为零,您将得到与您的表达式类似的表达式。

简单看一下就可以了,但实际上没有尝试过。您确定应该进行整数除法吗?在我看来,除非我完全误解了您的代码,否则您将遇到一些巨大的错误。@在这两者之间,您是对的。可能是因为这些整数,我无法正确地重新缩放边界框。我现在就试试。我应该接受上限还是下限?对于代码,代码看起来像C,所以为什么添加C++标签?