How to get Zoom value in scroll viewer in C# wpf Kinect SDK 2.0?
Asked Answered
C

1

13

I have recently started using the Kinect SDK 2.0 and am focusing on a zoom and pan functionality, as in the Control Basics-WPF sample.

I have got the zoom and pan functionality up and running. The problem is that I wish to access the value of the amount of zoom which has been performed by the Pinch zoom gesture.

Here is my xaml:

<UserControl x:Class="ImageNav.NavigationImage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:k="http://schemas.microsoft.com/kinect/2014"
      mc:Ignorable="d" 
      d:DesignWidth="1200"
      d:DesignHeight="700"
      >

    <Grid Grid.RowSpan="2">
        <ScrollViewer Name="scrollViewer" Grid.Row="0" 
                      HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"
                      k:KinectRegion.IsHorizontalRailEnabled="true" k:KinectRegion.IsVerticalRailEnabled="true"
                      k:KinectRegion.ZoomMode="Enabled">
            <Image Name="navigationImage" RenderTransformOrigin="0.5, 0.5" />
        </ScrollViewer>
        <TextBox x:Name="ZoomTextBox" Grid.Row="1" TextWrapping="Wrap" Text="Zoom: 100%" IsEnabled="False" Panel.ZIndex="10" BorderThickness="0" HorizontalAlignment="Right" VerticalAlignment="Bottom" FontSize="20"/>
    </Grid>
</UserControl>

I would have wanted there to be something like k:KinectRegion.ZoomFactor, but that isnt available. I've also tried to see what changes in the UI elements when I perform the zoom gesture, by writing the Height and ActualHeight properties of the ScrollViewer scrollViewer and Image navigationImage to a log file, but they show no change whatsoever.

When I perform the zoom gesture, I would like to get the value of zoom i.e. the current height and width of the image with respect to the original height and width.

Conflagrant answered 2/2, 2015 at 19:39 Comment(1)
Can you get to the current transform that is applied and deduce from the matrix maybe the zoom factor instead?Solubilize
H
5

This has nothing to do with Kinect SDK, this is more of a ScrollViewer zooming issue. There is no k:KinectRegion.ZoomFactor because zooming doesn't change the actual size of the image, it only performs some layout transformations, therefore you can get the zooming factor from LayoutTransform property of your Image.

Something like the following code should get the zooming factor:

UserControl.Code:

    public NavigationImage()
    {
        InitializeComponent();
        DataContext = this;
        _zoom = 1.0;
    }

    double _zoom;
    public string ZoomPercentage
    {
        get
        {
            return _zoom * 100 + "%";
        }
    }

    private void scrollViewer_MouseWheel(object sender, MouseWheelEventArgs e)
    {
        if (e.Delta > 0)
        {
            _zoom += 0.1;
        }
        else
        {
            _zoom -= 0.1;
        }

        ScaleTransform scale = new ScaleTransform(_zoom, _zoom);
        navigationImage.LayoutTransform = scale;
        OnPropertyChanged("ZoomPercentage");
        e.Handled = true;
    }

UserControl.Xaml:

<UserControl x:Class="ImageNav.NavigationImage"  ...    >

    <Grid Grid.RowSpan="2">
        <ScrollViewer Name="scrollViewer" Grid.Row="0" PreviewMouseWheel="scrollViewer_MouseWheel"
        ....
                      HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"
                      k:KinectRegion.IsHorizontalRailEnabled="true" k:KinectRegion.IsVerticalRailEnabled="true"
                      k:KinectRegion.ZoomMode="Enabled"
                      >
            <Image Name="navigationImage" RenderTransformOrigin="0.5, 0.5"/>
        </ScrollViewer>
        <TextBox x:Name="ZoomTextBox" Grid.Row="1" Text="{Binding ZoomPercentage, Mode=OneWay}" .... />
    </Grid>
</UserControl>
Hypothermia answered 26/9, 2015 at 6:58 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.