Dessiner avec la methode "drawimage"

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 120 fois - Téléchargée 18 fois

Contenu du snippet

la methode "paintpicture" propre a VB6, simple et efficace ... ne semble plus marcher sur VB2005. j'ai passé 2 jours a chercher une methode de remplacement et comment l'utiliser.
la methode : DrawImage.
j'ai trouvé la source ici : http://msdn.microsoft.com/fr-fr/library/dbsak4dc.aspx
cependant, tanto ils nous font déclarer un "e.graphics.drawImage" tanto d'autres choses obscure qui dans 80% des cas contraignent l'utilisation au simple "form_paint" avec les désavantage que cela peu générer.
la solution est pourtant toute simple, mais comme sous codesource (comme les autres) elle n'apparait nulle part, et que je dois pas etre le seul à luter pour trouver comment remplacer FACILEMENT paintpicture, voila ce que j'ai bidouiller. (!!! CA AFFICHE SUR LA FORM !!!)

Source / Exemple :


'code a copier ou vous le souhaitez (bien placé tout de meme ^^)

    Private Sub afficher_une_image(ByRef emplacement As String, ByRef X As Integer, ByRef Y As Integer, ByRef largeur As Integer, ByRef hauteur As Integer)

        Dim image1 As System.Drawing.Image
        image1 = System.Drawing.Image.FromFile(emplacement)
        'PictureBox1.PaintPicture(image1, souris_X, souris_Y, 1500, 1000) '=> cette methode, présenté sur de nombreux site, ne parait pas etre compatible avec VB2005
        'apres recherche, son equivalant direct est "drawimage"
        'lien msdn direct : http://msdn.microsoft.com/fr-fr/library/dbsak4dc.aspx

        If largeur = 0 Then largeur = image1.Width
        If hauteur = 0 Then hauteur = image1.Height

        Dim g As Graphics
        g = Me.CreateGraphics    'Pour une form
        g.DrawImage(image1, X, Y, largeur, hauteur)

    End Sub

'exemple pour appeler la fonction d'ou vous voulez.
'pour afficher "c:/image.jpg", à l'emplacement 100,100 sur la form, de taille 200 * 200

'avant : [VB6]
'dim image1 as picture
'set image1 = loadpicture("c:/image.jpg")
'form1.PaintPicture(image1, 100, 100, 200, 200)

'maintenant : [VB.net]
afficher_une_image("C:/image.jpg", 100, 100, 200, 200)

'pour l'exemple, voici un programme complet !
'vous pouvez dans une form vierge copier le code suivant : (il contient deux fonction plus celle cité au dessus. N'OUBLIEZ PAS DE CHANGER LA VARIABLE IMAGEPERSO !!!!) 

Friend Class Form1

    Inherits System.Windows.Forms.Form

    'les variables programme
    Dim souris_X As Short 'la position X de la souris en temps reel
    Dim souris_Y As Short 'la position Y de la souris en temps reel
    Dim imageperso as string = "c:/image.jpg" 'REMPLACEZ PAR CE QUE VOUS VOULEZ !!!!

    Private Sub Form1_MouseMove(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        '------------------------------------------------------
        ' position de la souris
        '------------------------------------------------------

        souris_X = eventArgs.X
        souris_Y = eventArgs.Y

            Me.Text = "essais de DrawImage. double clic pour voir !" & "      " & "[" & eventArgs.X & ";" & eventArgs.Y & "]" 'on ajoute alors au titre X et Y

    End Sub

    Private Sub Form1_DoubleClick(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.DoubleClick

        '------------------------------------------------------
        ' interaction utilisateur ( = double clic souris)
        '------------------------------------------------------

        afficher_une_image(imageperso, souris_X, souris_Y, 200, 200)

    End Sub

    Private Sub afficher_une_image(ByRef emplacement As String, ByRef X As Integer, ByRef Y As Integer, ByRef largeur As Integer, ByRef hauteur As Integer)

        Dim image1 As System.Drawing.Image
        image1 = System.Drawing.Image.FromFile(emplacement)
        'PictureBox1.PaintPicture(image1, souris_X, souris_Y, 1500, 1000) '=> cette methode, présenté sur de nombreux site, ne parait pas etre compatible avec VB2005
        'apres recherche, son equivalant direct est "drawimage"
        'lien msdn direct : http://msdn.microsoft.com/fr-fr/library/dbsak4dc.aspx

        If largeur = 0 Then largeur = image1.Width
        If hauteur = 0 Then hauteur = image1.Height

        Dim g As Graphics
        g = Me.CreateGraphics    'Pour une form
        g.DrawImage(image1, X, Y, largeur, hauteur)

    End Sub

End Class

Conclusion :


emplacement : emplacement sur le disque dur, en chaine de cara, du type c:/mes docs/image.jpg
X : emplacement X du haut gauche de l'image sur la form (en pixel)
Y : emplacement Y du haut gauche de l'image sur la form (en pixel)
largeur : largeur de l'image (witdh) (en pixel) [0 = taille d'origine]
hauteur : hauteur (height) de l'image (en pixel) [0 = taille d'origine]

on peu bien sure envisager très facilement d'ajouter la transparence, rotation ou encore selection d'une zone seulement de l'image a afficher. cependant, cela n'est pas le but de ma source que je voulais la PLUS SIMPLE POSSIBLE. consultez la msdn, ajoutez de "byref" et quelques structures logique pour ce faire. ca ne devrait pas poser de soucis. de meme, en ajoutant un objet dans la liste des référence a renvoyer à la fonction, on pourrait rattacher ce "paintpicture" version .net à autre chose qu'une form..

A voir également

Ajouter un commentaire Commentaires
Messages postés
109
Date d'inscription
dimanche 27 juillet 2008
Statut
Membre
Dernière intervention
2 février 2012
3
Dim MyImage As Bitmap
MyImage = Nothing
...
Messages postés
109
Date d'inscription
dimanche 27 juillet 2008
Statut
Membre
Dernière intervention
2 février 2012
3
extrait de msdn pour faire pareil dans une picturebox:
Ajoutez un bouton et une picturebox et collez ce code apres avoir declaré Private MyImage As Bitmap:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ShowMyImage(imageperso, 200, 200)
End Sub
Private Sub ShowMyImage(ByVal fileToDisplay As String, ByVal xSize As Integer, _
ByVal ySize As Integer)
' Sets up an image object to be displayed.
If (MyImage IsNot Nothing) Then
MyImage.Dispose()
End If
' Stretches the image to fit the pictureBox.
PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
MyImage = New Bitmap(fileToDisplay)
PictureBox1.ClientSize = New Size(xSize, ySize)
PictureBox1.Image = CType(MyImage, Image)
End Sub

Par contre, je ne sais pas comment on declare MyImage dans la fonction; msg:"la var est utilisée avant qu'une variable lui soit assignée..."
Messages postés
109
Date d'inscription
dimanche 27 juillet 2008
Statut
Membre
Dernière intervention
2 février 2012
3
Bonjour,
Insosama:Fonctionne immédiatement, c'est agréable pour une 1° utilisation de vbexpress.
Merci
Gillardg:ta ligne est la même (regarde):
image1 = System.Drawing.Image.FromFile(emplacement)
sauf que tu ne redimensionne pas (ça m'étonne de toi un tel commentaire).
Messages postés
78
Date d'inscription
samedi 26 août 2006
Statut
Membre
Dernière intervention
25 novembre 2016

Merci beaucoup Insosama, ton code m'a bien servi, je cherché comment apporter plusieurs images dans un PictureBox...
Ca fesait un baille que je cherché ce code, 10 pour te remercier ^^

Benji2000
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
4
Me.BackgroundImage = Image.FromFile(Environment.CurrentDirectory & "\img.gif")

en une ligne ça marche aussi
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.