Comment faire pour effectuer un zoom sur une Picturebox avec la molette de défilement dans vb.net
Je suis aide d'un jeu de superpositions graphiques pour dessiner une image à l'intérieur d'un contrôle picturebox à l'aide de l'objet graphique. J'ai mis le Picturebox à l'intérieur d'un Panneau et de régler le Panneau de défilement automatique. Ce que j'ai besoin de savoir comment faire maintenant est d'utiliser la molette de la Souris pour faire sauter la taille de l'image en petits incréments, tout en maintenant la qualité de l'image dessinée. Quelqu'un sait comment faire cela?
Quand je l'ai mise à jour avec Abdias Logiciel de code ci-dessous, la photo commence de plus petites lorsque la propriété Sizemode du picturebox est fixé à StretchImage. J'ai un pan de la fonctionnalité avec la souris qui peuvent interférer avec le maintien de ce code fonctionne correctement. Des Idées? Ce qui pourrait être de garder cette fonctionner correctement?
RÉSOLU
Ce code a fonctionné beaucoup mieux pour moi que les deux ci-dessous:
Private Sub PictureBox_MouseWheel(sender As System.Object,
e As MouseEventArgs) Handles PictureBox1.MouseWheel
If e.Delta <> 0 Then
If e.Delta <= 0 Then
If PictureBox1.Width < 500 Then Exit Sub 'minimum 500?
Else
If PictureBox1.Width > 2000 Then Exit Sub 'maximum 2000?
End If
PictureBox1.Width += CInt(PictureBox1.Width * e.Delta / 1000)
PictureBox1.Height += CInt(PictureBox1.Height * e.Delta / 1000)
End If
End Sub
PictureBox1.Size = New Size(bmp.Width, bmp.Height)
(également mettre à jour _origjnalSize avec la même). En plus de ça, je ne vois aucun problème potentiel sans voir plus de code.J'ai utilisé tout votre code, il suffit de différentes photos évidemment, mais fonctionne encore. (un peu comme un side-note: je ne suis pas sûr de savoir pourquoi vous mettez SetStyle (). Ils sont destinés aux contrôles de l'utilisateur et ne peut pas faire beaucoup en ce moment j'ai le code). En plus tout fonctionne comme prévu (même avec les setstyles activé). C'est un peu un mystère. Je suis sur XP btw. Je ne pense pas que les questions, mais il vaut la peine de vérifier, voire à éliminer, si vous êtes sur un autre win version.
Je suis sur Windows 7 avec Visual Studio Express 2012. Pensez-vous qu'il peut être un bug qu'ils n'ont pas encore fixé? Je détesterais pour déplacer l'ensemble de ce code et de redessiner tout à Visual Basic Express 2010. Uggg! Si vous n'avez pas l'esprit de me demander, quels sont vos paramètres de propriété de votre contrôle PictureBox et le Panneau de contrôle. Ne sais pas si c'est quelque chose de simple comme ça. Mais qui sait j'ai peut-être l'un de mes jeu de fou.
Voici mes paramètres: pastebin.com/FnAzVKzF Il pourrait être un bug dans VS2012, il semble certainement de cette façon. Une seule façon de le savoir...:)
OriginalL'auteur Greg Willard | 2012-11-21
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer ce code. Il suppose, il existe un
Panel1
etPictureBox1
sur la forme (PictureBox1
à l'intérieur de laPanel1
avecPanel1.AutoScroll = True
) avec un ensemble d'images sur lePictureBox
.Le code n'a pas à calculer le point central du zoom, mais vous pouvez utiliser l'e.Emplacement (ou e.X/e.Y).
Mise à jour - le nouveau code est ici qu'est (devrait être) plus robuste que la précédente (voir en bas):
Ancien code fonctionne, mais c'est instable sur les gros changements, probablement en raison des erreurs d'arrondi dans l'Échelle():
J'ai ajouté un peu de code-extrait de code dans l'événement load du formulaire de la taille de la pbox à celle de l'image fixés sur elle. Si l'image est définie à partir d'un autre lieu, bien sûr, il suffit de déplacer le code.
J'ai peut être une erreur d'arrondi problème. l'autre façon de le faire, au lieu de l'aide de l'Échelle(), calculer la Taille directement à l'aide de la variable. Je vais tester pour confirmer et si, mettre à jour ma réponse avec ce code à la place.
J'ai mis à jour mon premier post pour voir si peut-être que le code est à l'origine du problème. Merci et laissez-moi savoir. 🙂
J'ai mis à jour le code avec une approche différente qui semble stable.
OriginalL'auteur
fondamentalement, vous avez besoin d'une visionneuse d'image. J'ai utilisé ce avant:
http://cyotek.com/blog/creating-a-scrollable-and-zoomable-image-viewer-in-csharp-part-4
il fonctionne très bien. toutefois, c'est un contrôle de l'utilisateur.
pour picturebox, vous avez besoin de créer des graphiques à partir de l'image, puis d'interpolation. voici un exemple:
http://www.dotnetcurry.com/ShowArticle.aspx?ID=196
Je n'ai pas vérifié, mais ressemble à fonctionner.
vérifier le 2ème lien, il a c# et vb code. et c'est pour picturebox, mais je n'ai pas l'essayer avant.
Je l'ai vu, c'est un bon exemple, mais je suis à la recherche d'un exemple de défilement avec la molette de la souris et de ne pas le curseur de zoom. merci!
il suffit d'appliquer le code de la roulette de la souris de l'événement.
OriginalL'auteur urlreader
J'ai remarqué qu'il y a un effet indésirable avec la
StretchImage
SizeMode
qui ignore le rapport de l'image. J'ai juste ajouté une largeur et une hauteur ratio de variables à inclure dans le "zoom" de l'algorithme. Voir_ratWidth
et_ratHeight
dans le code ci-dessous.OriginalL'auteur tbm0115