2015-02-02 21 views
13

Ho recentemente iniziato a utilizzare Kinect SDK 2.0 e sto concentrando l'attenzione su una funzionalità di zoom e panoramica, come nell'esempio Control Basic - WPF.Come ottenere il valore di Zoom nel visualizzatore di scorrimento in C# wpf Kinect SDK 2.0?

Ho le funzionalità di zoom e panoramica attivate e funzionanti. Il problema è che desidero accedere al valore della quantità di zoom che è stata eseguita dal gesto di zoom di Pizzica.

Ecco il mio 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> 

Avrei voluto che ci sia qualcosa di simile k:KinectRegion.ZoomFactor, ma quello non è disponibile. Ho anche provato a vedere quali modifiche negli elementi dell'interfaccia utente quando eseguo il gesto zoom, scrivendo le proprietà Height e ActualHeight di ScrollViewer scrollViewer e Image navigationImage in un file di registro, ma non mostrano alcun cambiamento di sorta.

Quando eseguo il gesto di zoom, desidero ottenere il valore dello zoom, ovvero l'altezza e la larghezza correnti dell'immagine rispetto all'altezza e alla larghezza originali.

+0

Si può arrivare alla corrente trasformare che viene applicato e dedurre dalla matrice forse il fattore di zoom invece? –

risposta

5

Questo non ha nulla a che fare con Kinect SDK, questo è più di un problema di zoom ScrollViewer. Non esiste lo k:KinectRegion.ZoomFactor poiché lo zoom non cambia la dimensione effettiva dell'immagine, ma esegue solo alcune trasformazioni del layout, pertanto è possibile ottenere il fattore di ingrandimento dalla proprietà LayoutTransform del proprio Image.

Qualcosa come il seguente codice dovrebbe ottenere il fattore di zoom:

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> 
Problemi correlati