Исправлено глубокое увеличение - PullRequest
0 голосов
/ 18 февраля 2010

Есть ли способ выполнить фиксированное масштабирование для многокамерного изображения при глубоком увеличении? т.е. нажмите один раз, чтобы приблизить точку X, Y к 2x, нажмите еще раз, чтобы восстановить исходное положение и уровень масштабирования?

Я написал код для увеличения и уменьшения масштаба, но вызов zoomaboutlogicalpoint в середине процесса масштабирования приводит к слишком большому уменьшению масштаба (я думаю, из-за фактора 1/2 в событии увеличения мыши - могу ли я получить уровень масштабирования? ). Кроме того, я хотел бы, чтобы уменьшенное изображение было центральным (я полагаю, что я изменил точку для увеличения до середины изображения, но это, похоже, не работает, возможно, мне нужно учесть положение ViewPort?)

, например

private void msi_MouseLeftButtonDown (отправитель объекта, MouseButtonEventArgs e) {
Point p = e.GetPosition (msi); Зум (2, р); }

private void msi_MouseLeftButtonUp (отправитель объекта, MouseButtonEventArgs e) {
Point p = e.GetPosition (msi); Зум (1/2, р); }

    public void Zoom(double zoom, Point pointToZoom)
    {
        bool zoomingIn = zoom > 1;
        bool zoomingOut = zoom < 1;
        double minViewportWidth = 0.05;
        double maxViewportWidth = 1;

        if (msi.ViewportWidth < minViewportWidth && zoomingIn)
        {
            return;
        }

        if (msi.ViewportWidth > maxViewportWidth && zoomingOut)
        {
            return;
        }

        Point logicalPoint = this.msi.ElementToLogicalPoint(pointToZoom);
        this.msi.ZoomAboutLogicalPoint(zoom, logicalPoint.X, logicalPoint.Y);

    } 

Спасибо.

1 Ответ

0 голосов
/ 19 февраля 2010

Сброс источника преобразования до уменьшения масштаба, кажется, добился цели:

msi.RenderTransformOrigin = новая точка (msi.Height / 2, msi.Width / 2);

...