将画布居中放置在给定点上

时间:2011-08-23 20:21:14

标签: c# .net canvas point

我试图在一个点上居中一个矩形,但无法弄清楚要做的数学运算。

正在使用的上下文是一个绘制位图并允许用户在指定点放大,并在放大时平移/滚动的表单。

这是我的代码,当前用于将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。

1 个答案:

答案 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);
}

如果这不是您想要的,可以使用简单的屏幕截图编辑您的帖子。