C# 确定矩形的中心点并将新矩形移动到中心
我在一幅图像上用程序选择了一个矩形。用户可以选择设置矩形的大小,这样做矩形的大小应该增加,但旧矩形的中心点应该保持不变,这样矩形内的内容就不会失去焦点 这是正确的方法吗C# 确定矩形的中心点并将新矩形移动到中心,c#,.net,winforms,system.drawing,C#,.net,Winforms,System.drawing,我在一幅图像上用程序选择了一个矩形。用户可以选择设置矩形的大小,这样做矩形的大小应该增加,但旧矩形的中心点应该保持不变,这样矩形内的内容就不会失去焦点 这是正确的方法吗 objSmall.X = CInt(objBig.X + (Math.Round(((objBig.Width / 2) - (objSmall.Width / 2)), 0))) objSmall.Y = CInt(objBig.Y + (Math.Round(((objBig.Height / 2) - (objSmall.
objSmall.X = CInt(objBig.X + (Math.Round(((objBig.Width / 2) - (objSmall.Width / 2)), 0)))
objSmall.Y = CInt(objBig.Y + (Math.Round(((objBig.Height / 2) - (objSmall.Height / 2)), 0)))
新矩形可以比旧矩形大或小。计算正确;只需使用一个:
(并翻译成
C#
,因为源代码是VB.Net
)
可以使用整数除法(),因为我们用2除法,就像四舍五入一样。但在绘制时,尤其是移动对象时,应该使用浮点值(float
),如果不使用,位置会有很大偏差
objSmall.X = objBig.X + (objBig.Width - objSmall.Width) / 2;
objSmall.Y = objBig.Y + (objBig.Height - objSmall.Height) / 2;
或(2)
:
objSmall.Location = new Point(objBig.X + (objBig.Width - objSmall.Width) / 2,
objBig.Y + (objBig.Height - objSmall.Height) / 2);
或者,使用较大对象的相对中心坐标:
Point BigRectCenter = new Point((objBig.Width / 2) + objBig.X, (objBig.Height / 2) + objBig.Y);
objSmall.Location = new Point(BigRectCenter.X - (objSmall.Width / 2),
BigRectCenter.Y - (objSmall.Height / 2));
当您不知道哪个矩形最大时,也可以使用(2)
方法。假设您知道参考矩形的
位置
和大小
,并允许用户指定选择的新大小:
Rectangle OriginalRect = new Rectangle(30, 30, 120, 90);
Rectangle ResizedRect = new Rectangle(0, 0, 140, 140);
ResizedRect
有一个Size
(由用户定义),但此时它的位置是未知的。
新选择矩形(ResizedRect
)位置可以使用以下公式计算:
ResizedRect.Location = new Point(OriginalRect.X + (OriginalRect.Width - ResizedRect.Width) / 2,
OriginalRect.Y + (OriginalRect.Height - ResizedRect.Height) / 2);
计算是正确的;只需使用一个:
(并翻译成C#
,因为源代码是VB.Net
)
可以使用整数除法(),因为我们用2除法,就像四舍五入一样。但在绘制时,尤其是移动对象时,应该使用浮点值(float
),如果不使用,位置会有很大偏差
objSmall.X = objBig.X + (objBig.Width - objSmall.Width) / 2;
objSmall.Y = objBig.Y + (objBig.Height - objSmall.Height) / 2;
或(2)
:
objSmall.Location = new Point(objBig.X + (objBig.Width - objSmall.Width) / 2,
objBig.Y + (objBig.Height - objSmall.Height) / 2);
或者,使用较大对象的相对中心坐标:
Point BigRectCenter = new Point((objBig.Width / 2) + objBig.X, (objBig.Height / 2) + objBig.Y);
objSmall.Location = new Point(BigRectCenter.X - (objSmall.Width / 2),
BigRectCenter.Y - (objSmall.Height / 2));
当您不知道哪个矩形最大时,也可以使用(2)
方法。
假设您知道参考矩形的位置
和大小
,并允许用户指定选择的新大小:
Rectangle OriginalRect = new Rectangle(30, 30, 120, 90);
Rectangle ResizedRect = new Rectangle(0, 0, 140, 140);
ResizedRect
有一个Size
(由用户定义),但此时它的位置是未知的。
新选择矩形(ResizedRect
)位置可以使用以下公式计算:
ResizedRect.Location = new Point(OriginalRect.X + (OriginalRect.Width - ResizedRect.Width) / 2,
OriginalRect.Y + (OriginalRect.Height - ResizedRect.Height) / 2);
非常感谢:)将检查并返回。非常感谢:)将检查并返回。测试时会发生什么情况?@LarsTech我还没有测试过它。我想知道如何对较小/较大的矩形进行测试。测试时会发生什么情况?@LarsTech我还没有测试过。我想知道如何对较小/较大的矩形执行此操作。