Je voudrais que quand dans mon programme je met une photo de profil une fenetre apparait avec une PictureBox et un rectangle dessus. Le rectangle serait pour redimensionner l'image qu j'ai mis le rectangle serait de 100 par 100 pixel et il serais possible d'agrandir le rectangle par les coin mais la photo serais convertit en 100 par 100 pixel j'ai vraiment aucune idée si c'est possible en VB.NET j'ai fais de nombreuse recherche mais la plus part des résultats était pour faire une sélection sur la PictureBox et la redimensionner.
2 formulaires, l'un qui contiendra l'image a recadré, et l'autre le rendu final, pourquoi 2 ? Car j'utilise la propriété BackGroundImage du 1er formulaire qui laissera un autre contrôle (picturebox) à une couleur transparent, ce qui correspond à celle du formulaire.
Form1 :
Donner la taille que l'on veut au formulaire, la photo de profile s'y remplira avec de préférence la propriété BackGroundImageLayout à Stretch, et la propriété BackGoundImage contient la photo de profile; ensuite placer une PictureBox à l'emplacement voulu sur ce formulaire, y mettre la propriété BackGroundColor à Transparent, et pour être aperçu, la propriété BorderStyle à FixedSingle. Rien de sorcier pour le moment, mais je préfère détaillé.
Form2 :
Juste placer une PictureBox de la même taille que l'autre PictureBox de la 1er form dans le formulaire.
Pour ce qui est du code, tout ce passe dans la Form1 :
A déclarer en globale :
Private Declare Auto Function BitBlt Lib "gdi32.dll" (ByVal pHdc As IntPtr, ByVal iX As Integer, ByVal iY As Integer, ByVal iWidth As Integer, ByVal iHeight As Integer, ByVal pHdcSource As IntPtr, ByVal iXSource As Integer, ByVal iYSource As Integer, ByVal dw As System.Int32) As Boolean
Private Const SRC As Integer = &HCC0020
Dim x, y As Integer
Dim newpoint As Point
La fonction BitBlt fait appel a la librairie gdi32 et prenant plusieurs paramètres qui sont requis à l'enregistrement d'une image, ici du type BipMap, tu peux retrouver plus de détailles sur cela ici. L'utilisation de cette fonction requière une constante, enfin pas nécessaire mais c'est plus lisible et conventionnel, elle se nomme SRC, ligne 2. Les variables x, y et newpoint servent à la meus (Impératif présent du verbe Mouvoir (xD)) du rectangle de recadrement, la picturebox.
Voici ses événement pour pouvoir bouger sous le mouvement de la souris :
Private Sub PictureBox_MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
x = Control.MousePosition.X - PictureBox1.Location.X
y = Control.MousePosition.Y - PictureBox1.Location.Y
End Sub
Private Sub PictureBox_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
If e.Button = Windows.Forms.MouseButtons.Left Then
newpoint = Control.MousePosition
newpoint.X -= (x)
newpoint.Y -= (y)
PictureBox1.Location = newpoint
ConvertPictureBox_BMP(PictureBox1, "ProfileFile")
End If
End Sub
Encore une fois, ce n'est pas difficile de faire ça, voici maintenant le plus compliqué, mais bon, je suis gentil je t'ais tout donné, comme maitre gims... (faudrais qu'j'arrête ces blagues à deux balles )
Je ne vais pas t'expliqué ce code, ci dessus, il est simple a comprendre et tu trouve pleins d'exemple sur internet, néamoins, il contient un appel à la fonction 'ConvertPictureBox_BMP' que voici :
Public Sub ConvertPictureBox_BMP(ByVal PictureBox As PictureBox, ByVal sFilePath As String)
PictureBox.Refresh()
PictureBox.Select()
Dim g As Graphics = PictureBox.CreateGraphics
Dim ibitMap As New Bitmap(PictureBox.ClientSize.Width, PictureBox.ClientSize.Height, g)
Dim iBitMap_gr As Graphics = Graphics.FromImage(ibitMap)
Dim iBitMap_hdc As IntPtr = iBitMap_gr.GetHdc
Dim me_hdc As IntPtr = g.GetHdc
BitBlt(iBitMap_hdc, 0, 0, PictureBox.ClientSize.Width, PictureBox.ClientSize.Height, me_hdc, 0, 0, SRC)
iBitMap_gr.ReleaseHdc(iBitMap_hdc)
If sFilePath = "" Then Exit Sub
ibitMap.Save(sFilePath + ".bmp")
Form2.PictureBox1.Image = ibitMap
End Sub
La fonction prend deux paramètres : La picturebox qui "encadre" l'élément à enregistrer, et qui sera donc le désultat du redimentionnement, et le chemins où nous voulons enregistrer cette image, ici j'ai juste mis son nom "ProfileFile", elle sera enregistrer là où s'éxecutera l'application sous ce nom.
Ensuite, dans le code, on "raffréchi" et séléctionne la picturebox, et puis on déclare plusieurs variables qui serviront à la fonction BitBlt, regarde dans le lien ci-dessus énnoncé pour mieux comprendre.
Ensuite, viens cette fameuse fonction, que j'ai déjà expliqué.
Puis, l'enregistrement et l'affichage, qui se font seulement si le nom du fichier requi en paramètre n'est guère nul. Pas besoin de t'expliquer ces 3 dernières lignes je suppose.
Voilà, c'est vrai qu'il y a quelques lag, c'est à cause de la fonction ConverPictureBox_BMP, qui doit a chaques fois que la PictureBox1 bouge de 1 pixel, doit réenregistrer un nouveau fichier image. Donc, une alternative, est d'appeler cette fonction dans un bouton "Save" ou encore "View Result", afin de ne pas trops tout surcharger.
Voilà Pour ce qui est du redimentionnement de l'image, tu as dis que tu avais trouver ce qu'il fallait, donc bhas à toi maintenant
- Edité par vanaur 22 août 2017 à 21:19:54
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Bon ça marche très merci beaucoup pour votre grande aide mais j'ai rencontrer un problèmes puisque je vais l'utiliser pour modifier la grandeur des avatar de profil il n'y auras pas seulement des photo Bitmap donc sa pourrait causer problemes
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...