我试图在一个点上居中一个矩形,但无法弄清楚要做的数学运算。
正在使用的上下文是一个绘制位图并允许用户在指定点放大,并在放大时平移/滚动的表单。
这是我的代码,当前用于将CanvasBounds集中在ClientRectangle中间的代码:
private void UpdateCanvas()
{
int canvasWidth = (int)(_bitmap.Width * _zoomRatio);
int canvasHeight = (int)(_bitmap.Height * _zoomRatio);
Point canvasLocation = new Point((ClientRectangle.Width - canvasWidth) / 2, (ClientRectangle.Height - canvasHeight) / 2);
CanvasBounds = new Rectangle(canvasLocation, new Size(canvasWidth, canvasHeight));
}
_zoomRatio是用于调整画布大小的缩放。 1.0将是100%,2.0是200%等。
基本上我想要将此函数作为鼠标输入的一个点,并将该点用作canvasBounds矩形的中心。然后,当用户操纵水平和垂直滚动条时,它可以更改_centerPoint并更新CanvasBounds。
答案 0 :(得分:0)
我认为你需要用你的画布大小来抵消你的“点”:
private void UpdateCanvas(Point mousePoint)
{
int canvasWidth = (int)(_bitmap.Width * _zoomRatio);
int canvasHeight = (int)(_bitmap.Height * _zoomRatio);
int canvasX = (mousePoint.X - (canvasWidth / 2));
int canvasY = (mousePoint.Y - (canvasHeight / 2));
CanvasBounds = new Rectangle(canvasX, canvasY, canvasWidth, canvasHeight);
}
如果这不是您想要的,可以使用简单的屏幕截图编辑您的帖子。