Bonjour à tous,
Je fais mes premiers pas en c# (ces dernières années, je me suis fait les dents sur du C++), et je dois faire une application multitouch.
Pour symboliser mes besoins, prenons l'exemple classique de manipulation de photos:
dans les exemples que j'ai trouvé sur le net, il est pratiquement toujours question d'utiliser une matrice pour coder les transformation du renderTransform associé à l'image. C'est très bien, mais j'ai besoin, à terme, de récupérer les coordonnées de mon objet sous forme de transformation scale, rotation, et translation.
j'ai donc représenté mon image en xaml de cette façon:
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <UserControl blablabla...> <Image Name="nom" Source="{Binding Path=ImagePath}" Stretch="Fill" Width="100" Height="100" RenderTransformOrigin="0.5, 0.5"> <Image.RenderTransform> <TransformGroup> <TranslateTransform x:Name="ajustement"/> <ScaleTransform ScaleX="{Binding Path=ScaleX}" ScaleY="{Binding Path=ScaleY}"></ScaleTransform> <RotateTransform Angle="{Binding Path=Angle}" /> <TranslateTransform x:Name="reajustement"/> <TranslateTransform X="{Binding Path=X}" Y="{Binding Path=Y}" /> </TransformGroup> </Image.RenderTransform> </Image> </UserControl>
et dans le code, j'ai
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 private void Manip_delta(object sender, ManipulationDeltaEventArgs e) { var element = e.OriginalSource as UIElement; ajustement.X = -e.ManipulationOrigin.X+this.X; ajustement.Y = -e.ManipulationOrigin.Y+this.Y; reajustement.X = -ajustement.X; reajustement.Y = -ajustement.Y; this.Angle += e.DeltaManipulation.Rotation; this.X += e.DeltaManipulation.Translation.X; this.Y += e.DeltaManipulation.Translation.Y; this.imageBuilding.Width *= e.DeltaManipulation.Scale.X; this.imageBuilding.Height *= e.DeltaManipulation.Scale.Y; //j'attaque directement les dimensions de l'image parce que pour une raison qui m'échappe, les attributs scaleX et scaleY sont sans effet sur mon image... si quelqu'un a une idée... e.Handled = true; }
Ca fonctionne, mais à l'utilisation, un gros décalage se fait entre mes doigt et l'image, comme si il y avait un problème dans les centres de mes transformations.... Je comprends pas bien pourquoi, puisque je prends même la peine de réajuster mon objet en fonction du centre de la manip...
quelqu'un a une idée? parce que là, je sèche...
Merci !
Partager