2012-11-19 7 views
1

Actuellement, j'utilise un contrôle WPF Image pour afficher des images. Je veux faire ce qui suit: Sur un événement MouseUp, MouseDown ou MouseMove, je veux obtenir les coordonnées du point sous le curseur, pas en référence au coin supérieur gauche du contrôle, mais par rapport aux coordonnées réelles de le bitmap affiché, qui a peut-être été redimensionné, ou peut avoir un rapport d'aspect différent de celui du contrôle lui-même. Si un autre contrôle fournit cette fonctionnalité, je serais également heureux d'en entendre parler. Merci d'avance.Comment obtenir les coordonnées (x, y) de l'image affichée?

EDIT: Je voudrais aussi le savoir si les coordonnées du contrôle étaient en dehors de la plage de l'image, en raison d'un rapport d'aspect différent.

Répondre

3

Vous pouvez utiliser les différentes méthodes TransformTo* de la classe Visual pour obtenir, coordonne par rapport à un contrôle spécifique, il prendra en compte toutes les transformations appliquées à l'arbre visuel.

En outre, si vous attachez MouseUp, MouseDown et MouseMove au contrôle Image lui-même, vous devriez déjà obtenir les coordonnées correctes du MouseButtonEventArgs et si vous utilisez la souris en dehors des limites visuelles du contrôle, vous ne serez pas les événements, de sorte que vous n'avez pas besoin de vérifier le code supplémentaire pour les coordonnées étant hors limites.

Si votre réelle objectif est de savoir quel pixel acutal de votre image bitmap a été touché par la souris (comme vous avez besoin pour un logiciel d'édition bitmap/pixel) les choses deviennent beaucoup plus difficile parce que WPF utilise indendent de périphérique virtuel pixels qui ne se rapportent pas directement aux pixels de l'écran ou aux pixels d'un bitmap qui a été rendu dans un contrôle Image. Le contrôle Image met à l'échelle en interne une image bitmap basée sur les paramètres DPI du fichier bitmap lui-même et sur la base des paramètres DPI du système d'exploitation.

+0

La dernière partie est mon vrai but, pour être exact. Un logiciel de retouche d'image est exactement ce que j'essaie de développer, et c'est une partie importante de ce qui le retient. Un contrôle alternatif serait le bienvenu, s'il y en a. En outre, je ne voulais pas dire les limites du contrôle, je voulais dire les limites de l'image affichée à l'intérieur. –

+0

Vous devriez certainement chercher une alternative au contrôle 'Image' dans ce cas, vous devrez probablement en écrire un vous-même. – bitbonk

3

vous pouvez obtenir les coordonnées de la souris de cette façon:

private void image1_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
Point point = e.GetPosition(image1); //position relative to the image 
Point point2 = e.GetPosition(this); //position relative to the window 
} 

Espoir qui a répondu à une partie de votre question.

+0

Je le savais déjà, mais je le noterai utile de toute façon. Vous me donnez accès aux coordonnées relatives au contrôle 'Image', pas vraiment par rapport à l'image qui s'y trouve, et pas vraiment aux coordonnées du bitmap. –

Questions connexes