Прокрутка с помощью колесика мыши и масштабирование изображения с панорамированием - PullRequest
0 голосов
/ 20 мая 2010

Я хотел бы сделать небольшое приложение Silverlight, которое отображает одно довольно большое изображение, которое можно увеличить, прокручивая мышь, а затем перемещая ее с помощью мыши.это похоже на функцию в Google Maps, и я не хочу использовать DeepZoom.

вот что у меня есть в данный момент.пожалуйста, имейте в виду, что это мое первое приложение Silverlight: это приложение для меня, чтобы увидеть, что это хороший способ встроить сайт.так что это демо-приложение и поэтому имеет плохие имена переменных.

исходное изображение шириной 1800 пикселей.

    private void sc_MouseWheel(object sender, MouseWheelEventArgs e)
    {
        var st = (ScaleTransform)plaatje.RenderTransform;
        double zoom = e.Delta > 0 ? .1 : -.1;
        st.ScaleX += zoom;
        st.ScaleY += zoom;
    }

это работает, но может использовать некоторое сглаживание, и оно расположено вверху слева и не по центру.

панорамирование выглядит так: найдено @ @ 1014 *Pan & Zoom Image и преобразовал его в это ниже для работы в Silverlight

    Point start;
    Point origin;
    bool captured = false;

    private void plaatje_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        plaatje.CaptureMouse();
        captured = true;
        var tt = (TranslateTransform)((TransformGroup)plaatje.RenderTransform)
            .Children.First(tr => tr is TranslateTransform);
        start = e.GetPosition(canvasje);
        origin = new Point(tt.X, tt.Y);
    }

    private void plaatje_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        plaatje.ReleaseMouseCapture();
        captured = false;
    }

    private void plaatje_MouseMove(object sender, MouseEventArgs e)
    {
        if (!captured) return;

        var tt = (TranslateTransform)((TransformGroup)plaatje.RenderTransform).Children.First(tr => tr is TranslateTransform);
        double xVerschuiving = start.X - e.GetPosition(canvasje).X;
        double yVerschuiving = start.Y - e.GetPosition(canvasje).Y;
        tt.X = origin.X - xVerschuiving;
        tt.Y = origin.Y - yVerschuiving;
    }

, поэтому масштабирование не плавное и панорамирование не работает, потому что когда я нажимаю на него, изображение исчезает.

1 Ответ

1 голос
/ 21 мая 2010

Первое, что я заметил, было это:

var st = (ScaleTransform)plaatje.RenderTransform;

и

(TransformGroup)plaatje.RenderTransform

. Итак, в одном обработчике вы приводите "plaatje.RenderTransform" к ScaleTransform, а в другом - в TransformGroup? Это, вероятно, вызывает исключение, заставляя ваше изображение исчезнуть.

Для части масштабирования вы можете попробовать установить RenderTransformOrigin объекта, который вы хотите масштабировать ("plaatje"?), На "0,5,0.5", что означает центр элемента пользовательского интерфейса. Таким образом, изображение будет масштабироваться вокруг его центральной точки вместо верхнего левого угла.

Приветствия, Алекс

...