Comment faire pour récupérer facteur de zoom de WinForms PictureBox?
J'ai besoin de la position exacte de mon pointeur de la souris sur un contrôle PictureBox.
- Je utiliser l'événement MouseMove de la PictureBox.
Sur ce PictureBox, j'utilise le "zoom" de la propriété à afficher une image.
Quelle est la bonne façon pour obtenir la position de la souris sur l'original (sans zoom) de l'image?
Est-il un moyen de trouver le facteur d'échelle et l'utiliser?
Je pense qu'il faut utiliser imageOriginalSize/imageShowedSize pour récupérer ce facteur d'échelle.
J'utilise cette fonction:
float scaleFactorX = mypic.ClientSize.Width / mypic.Image.Size.Width;
float scaleFactorY = mypic.ClientSize.Height / mypic.Image.Size.Height;
Est possible d'utiliser cette valeur pour obtenir la bonne position du curseur sur l'image?
Je suppose que vous pouvez essayer: Point cursorPosition = mypic.PointToClient(Curseur.Position); Point positionOverImage = new Point(cursorPosition.X / scaleFactorX, cursorPosition.Y / scaleFactorY);. Cependant, je suppose qu'il peut y avoir quelques problèmes avec précision lorsque vous comptez facteur de zoom à l'aide de cette méthode. Je vous suggère à l'échelle de l'image sur votre propre.
merci,mais ne fonctionne pas.position est incorrecte,je reçois la même valeur lors de l'utilisation de pointtoclient et eventmouseargs position.
Merci de poster l'extrait de code de calcul des coordonnées que vous utilisez actuellement.
Rectangle sourceRec = new Rectangle((int)(e.X / currentScale), (int)(e.Y / currentScale), 1, 1);
Quand vous dites que vous avez besoin de vos coordonnées de la souris à l'égard de l'image non étirée, ce qui est le point d'ancrage que vous attendez de votre image non étirée? Est-il ancré en haut à gauche? Ancrée au centre?
merci,mais ne fonctionne pas.position est incorrecte,je reçois la même valeur lors de l'utilisation de pointtoclient et eventmouseargs position.
Merci de poster l'extrait de code de calcul des coordonnées que vous utilisez actuellement.
Rectangle sourceRec = new Rectangle((int)(e.X / currentScale), (int)(e.Y / currentScale), 1, 1);
Quand vous dites que vous avez besoin de vos coordonnées de la souris à l'égard de l'image non étirée, ce qui est le point d'ancrage que vous attendez de votre image non étirée? Est-il ancré en haut à gauche? Ancrée au centre?
OriginalL'auteur devilkkw | 2012-05-06
Vous devez vous connecter pour publier un commentaire.
J'ai eu à résoudre ce même problème aujourd'hui. Je voulais qu'il fonctionne pour les images de n'importe quelle largeur:ratio de hauteur.
Voici ma méthode pour trouver le point 'unscaled_p" sur l'original de la taille de l'image.
La première astuce est de déterminer si l'image est à l'horizontale ou à la verticale plus grande par rapport au conteneur, afin que vous sachiez à qui dimension de l'image remplit complètement le récipient.
Noter qu'en raison de Zoom centres de l'image, le "remplissage" de longueur doit être prise en compte pour déterminer la dimension qui n'est pas rempli par l'image. Le résultat, 'unscaled_p', est le point sur le non mis à l'échelle de l'image que 'p' correspond à.
Espère que ça aide!
OriginalL'auteur dan
Si je vous ai bien compris, je crois que vous voulez faire quelque chose de cette nature:
Hypothèse: la PictureBox s'adapte à la taille de l'image, il n'y a pas d'espace entre la bordure de la PictureBox et l'image réelle.
cela devrait vous donner les points de livraison d'un pixel dans l'image d'origine.
J'ai raté le
(float)
pour le ratio, ne que, pour le moment, si vous dites avar ratioX
, alors il sera probablement uneint
, sensratioX/Y
sera toujours zéro.OriginalL'auteur Dene B