Я пытаюсь центрировать прямоугольник в точке и не могу понять, какая математика необходима для этого.
Контекст, в котором он используется, представляет собой форму, которая рисует растровое изображение и позволяет пользователюдля увеличения в указанной точке и перемещения / прокрутки при увеличении.
Вот мой код, который в настоящее время работает для центрирования 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.