/ / Comment obtenir une valeur de zoom dans la visionneuse de défilement en C # wpf Kinect SDK 2.0? - c #, wpf, scrollview, kinect, kinect-sdk

Comment obtenir une valeur de zoom dans la visionneuse de défilement en C # wpf Kinect SDK 2.0? - c #, wpf, scrollview, kinect, kinect-sdk

J'ai récemment commencé à utiliser Kinect SDK 2.0 et je me suis concentré sur une fonctionnalité de zoom et de panoramique, comme dans l'exemple Control Basics-WPF.

J'ai mis en place la fonctionnalité de zoom et de panoramique. Le problème est que je souhaite accéder à la valeur de la quantité de zoom qui a été effectuée par le geste de zoom pincé.

Voici mon 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>

J'aurais voulu qu'il y ait quelque chose comme k:KinectRegion.ZoomFactor, mais ce n'est pas disponible. J’ai également essayé de voir quels changements étaient apportés aux éléments de l’UI lorsque j’exécutais le geste de zoom en écrivant le texte suivant: Height et ActualHeight propriétés du ScrollViewer scrollViewer et Image navigationImage dans un fichier journal, mais ils ne montrent aucun changement.

Lorsque j'exécute le geste de zoom, j'aimerais obtenir la valeur de zoom, c'est-à-dire la hauteur et la largeur actuelles de l'image par rapport à la hauteur et à la largeur d'origine.

Réponses:

5 pour la réponse № 1

Cela n’a rien à voir avec Kinect SDK, c’est plutôt un ScrollViewer problème de zoom. Il n'y a pas k:KinectRegion.ZoomFactor Comme le zoom ne modifie pas la taille réelle de l’image, il effectue uniquement certaines transformations de mise en page. Vous pouvez donc obtenir le facteur de zoom de LayoutTransform propriété de votre Image.

Quelque chose comme le code suivant devrait obtenir le facteur de 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>