Центрирование холста по заданной точке - PullRequest
1 голос
/ 24 августа 2011

Я пытаюсь центрировать прямоугольник в точке и не могу понять, какая математика необходима для этого.

Контекст, в котором он используется, представляет собой форму, которая рисует растровое изображение и позволяет пользователюдля увеличения в указанной точке и перемещения / прокрутки при увеличении.

Вот мой код, который в настоящее время работает для центрирования 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 голосов
/ 24 августа 2011

Я думаю, вам нужно просто сместить вашу "точку" размером вашего холста:

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

Если это не то, что вы ищете, возможно, отредактируйте свое сообщение простым снимком экрана.

...