Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定矩形的中心点并将新矩形移动到中心_C#_.net_Winforms_System.drawing - Fatal编程技术网

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我还没有测试过。我想知道如何对较小/较大的矩形执行此操作。