Niedawno zacząłem używać zestawu Kinect SDK 2.0 i skupiam się na funkcji zoomu i panoramy, jak w przykładzie Control Basics-WPF.
Mam działającą funkcję powiększania i przesuwania. Problem polega na tym, że chcę uzyskać dostęp do wartości powiększenia, która została wykonana przez gest powiększenia palcem.
Oto mój 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>
Chciałbym, żeby było coś takiego k:KinectRegion.ZoomFactor
, ale to nie jest dostępne. Próbowałem również zobaczyć, jakie zmiany w elementach interfejsu użytkownika, gdy wykonuję gest powiększenia, pisząc Height
i ActualHeight
właściwości ScrollViewer scrollViewer
i Image navigationImage
do pliku dziennika, ale nie wykazują żadnych zmian.
Kiedy wykonuję gest powiększenia, chciałbym uzyskać wartość przybliżenia, tj. Aktualną wysokość i szerokość obrazu w stosunku do oryginalnej wysokości i szerokości.
Odpowiedzi:
5 dla odpowiedzi № 1To nie ma nic wspólnego z Kinect SDK, jest to bardziej a ScrollViewer
problem z powiększaniem. Nie ma k:KinectRegion.ZoomFactor
ponieważ powiększenie nie zmienia rzeczywistego rozmiaru obrazu, wykonuje tylko niektóre przekształcenia układu, dlatego można uzyskać współczynnik powiększenia od LayoutTransform
własność twojego Image
.
Coś takiego jak poniższy kod powinno uzyskać współczynnik powiększenia:
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>