2009-01-07 7 views
1

J'ai un PictureBox (sa propriété SizeMode définie sur Zoom) contenant une image, et les deux peuvent varier en taille.PictureBoxSizeMode.Zoom - Quel est le facteur de zoom?

Étant donné que l'utilisateur doit interagir directement avec l'image, j'ai besoin de pouvoir convertir les coordonnées de clic PictureBox en coordonnées d'image.

Ce que j'ai fait jusqu'à présent, est de comparer le rapport d'aspect de la PictureBox au rapport d'aspect de l'image. Par exemple, si le PictureBox est "plus large" par rapport à l'image (voir capture d'écran), cela signifie que PictureBox étendra l'image à sa propre hauteur et la centrera horizontalement, montrant sa couleur de fond (dans ce cas rouge) au gauche et droite de l'image. Ensuite, je suppose que la hauteur affichée de l'image est la même que PictureBox.Height, et travailler à partir de là.

Il y a un problème, cependant. Comme vous pouvez le voir sur la capture d'écran (mine d'annotation verte), l'image blanche étant étirée pour s'ajuster (zoomée) à l'intérieur de la PictureBox rouge laisse une petite marge en bas.

screenie http://img132.imageshack.us/img132/3541/bordernl6.th.png Click for full-size.

Cela ne se produit pas pour toutes les combinaisons PictureBox.Size/de Image.Size, cependant. Cela m'amène à croire qu'il doit y avoir une meilleure façon de faire cela.


Bien sûr, je le ferai. Je dois juste adapter le code pour supprimer la dépendance au contexte.

Mais la marge en bas ne vient pas de mon code. Cela vient du PictureBox lui-même. Faites-moi une faveur et essayez ce qui suit:

Ajoutez un PictureBox (PictureBox1) à un formulaire, l'ancrer aux quatre côtés du formulaire. Le code doit se présenter comme suit:

Public Class Form1 

    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown 

     PictureBox1.SizeMode = PictureBoxSizeMode.Zoom 

     PictureBox1.BackColor = Color.Red 
     PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height) 
     Dim g As Graphics = Graphics.FromImage(PictureBox1.Image) 

     g.FillRectangle(Brushes.White, 0, 0, PictureBox1.Image.Width, PictureBox1.Image.Height) 

    End Sub 

End Class 

Exécuter et redimensionner le formulaire afin que l'image est étirée (zoomée) pour remplir la hauteur du PictureBox, laissant les barres rouges à gauche et à droite du carré blanc. Maintenant, redimensionnez le formulaire verticalement, aussi lentement que possible. Vous devriez voir une marge rouge au fond de temps en temps.

La même chose se produit avec la largeur et un redimensionnement horizontal, avec une marge vers la droite. C'est à cause de cette petite imperfection que je sais que le facteur de zoom ne peut pas être calculé comme je l'ai fait; le résultat ne serait qu'une approximation. Si après avoir essayé cela, vous pensez toujours que le code est pertinent, je le publierai volontiers.

Merci d'avoir pris le temps de lire et répondre.

+0

Le lien vers la capture d'écran se termine par un 404 – K3N

Répondre

0

Je ne pense pas qu'il existe un moyen d'obtenir le facteur de zoom. Je suppose qu'il y a peut-être une erreur dans vos calculs en raison de la marge en bas (peut-être vous avez une erreur unique ou quelque chose de ce genre).

Pourriez-vous poster un exemple complet montrant les calculs que vous effectuez?