【问题标题】:How to get Zoom value in scroll viewer in C# wpf Kinect SDK 2.0?如何在 C# wpf Kinect SDK 2.0 的滚动查看器中获取缩放值?
【发布时间】:2015-04-01 20:29:17
【问题描述】:

我最近开始使用 Kinect SDK 2.0 并专注于缩放和平移功能,如 Control Basics-WPF 示例中所示。

我已经启动并运行了缩放和平移功能。问题是我希望访问由捏缩放手势执行的缩放量的值。

这是我的 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>

我本来希望有类似k:KinectRegion.ZoomFactor 的东西,但那不可用。我还尝试通过将ScrollViewer scrollViewerImage navigationImageHeightActualHeight 属性写入日志文件来查看执行缩放手势时UI 元素的变化,但它们没有显示任何变化不管怎样。

当我执行缩放手势时,我想获得缩放的值,即图像的当前高度和宽度相对于原始高度和宽度。

【问题讨论】:

  • 你能得到当前应用的变换并从矩阵中推断出缩放因子吗?

标签: c# wpf scrollview kinect kinect-sdk


【解决方案1】:

这与 Kinect SDK 无关,这更像是ScrollViewer 缩放问题。没有k:KinectRegion.ZoomFactor,因为缩放不会改变图像的实际大小,它只会执行一些布局转换,因此您可以从ImageLayoutTransform 属性中获取缩放系数。

类似下面的代码应该得到缩放系数:

用户控制代码:

    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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 2013-06-27
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多