IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Sauver une image en jpeg avec un control (bouton) dessus


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Par défaut Sauver une image en jpeg avec un control (bouton) dessus
    Bonsoir,

    J'essaye de sauver une image (situe dans une picturebox) avec un control dessus (un simple bouton par exemple).
    Mais, cela parait assez complique. Et je ne suis pas sur de tout comprendre...
    En fait, j'ai essaye de sauver en fichier jpeg le control picturebox (avec ce qui est dessus: image et bouton), un genre de 'screenshot'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Imports System.Drawing
     
    Public Class Form1
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            ControlBmpToFile(PictureBox1, "C:\Users\JLuc01\Desktop\")
        End Sub
     
        Public Sub ControlBmpToFile(ByVal control As Control, ByVal file As String)
            Dim bmp As New Bitmap(control.Width, control.Height)
            control.DrawToBitmap(bmp, control.DisplayRectangle)
            bmp.Save(file, System.Drawing.Imaging.ImageFormat.Jpeg)
        End Sub
     
    End Class
    Mais, j'ai une erreur, pas tres clair pour moi: "A generic error occurred in GDI+."
    Bref, je ne sais pas trop comment m'y prendre, si toutefois cela est faisable.

    Toute suggestion est bienvenue.
    Merci,
    JLuc01

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    BONJOUR

    Bitmap.SaveAdd(path&filename,System.Drawing.Imaging.ImageFormat.Jpeg)

    code .vb :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Public Class Form1
        Private pathfilename As String = "C:\Users\JLuc01\Desktop\MonImage"  'chemin +nom de fichier
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim bmp As Bitmap = PictureBox1.Image
            bmp.Save(pathfilename, System.Drawing.Imaging.ImageFormat.Jpeg)
     
        End Sub
    End Class
    bon code....

  3. #3
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    re
    OUPS !!!
    lire :

    Bitmap.Save(path&filename,System.Drawing.Imaging.ImageFormat.Jpeg)

  4. #4
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Bonsoir,

    Avec cette méthode, tu vas obtenir le contenu de ta picturebox (donc l'image), mais j'ai bien peur que tu n'auras pas le contrôle qui est dessus, à moins que ta picturebox ne soit le contrôle parent des contrôles qui sont dessus (à tester).

    Pour remédier à cela, tu peux peut être essayer d'utiliser la méthode DrawToBitmap sur ta form elle-même et de ne retenir que le rectangle correspondant à ta pictureBox. Et si ça ne marche pas, je pense qu'il te restera alors à le faire en plusieurs étape :
    • Un DrawToBitmap pour ta picturebox ;
    • Un DrawToBitmap pour le contrôle qui est dessus.


    Ensuite, concernant l'erreur en elle-même, je ne sais pas trop. Mais il faudrait que tu testes en spécifiant un nom de fichier, et non un nom de répertoire. Je ne dis pas que c'est ce qui cause l'erreur, mais en tout cas, c'en est une !

  5. #5
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    re


    J'essaye de sauver une image (situe dans une picturebox) avec un control dessus (un simple bouton par exemple).
    Mmm...j'ai pas lu cela ...Y COMPRIS LE BOUTON !!!
    Tu veux faire un "snapshot" (instantané photo) du PictureBox ...
    Dans ce cas il faut utiliser :
    -Graphics.CopyFromScreen(upperLeftSource , upperLeftDestination ,RegionSize)
    -le Graphics est crée à partir d'un nouveau Bitmap de taille approprie (la zone ciblé par tes soins, soit la zone cliente )
    -ensuite c'est le code déjà donné...

    code behind vb.net revu avec 2 PictureBoxes:
    -Pic qui affiche l'image du koala + whatever you want (1 ou plusieurs controls droppes edans)
    -PicApercu qui affiche le bitmap "snapshot"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Public Class Form1
        Private pathfilename As String = "C:\Users\JLuc01\Desktop\MonImage"  'chemin +nom de fichier
           Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Pic.SizeMode = PictureBoxSizeMode.StretchImage
            Pic.Image = My.Resources.Koala
     
            PicApercu.SizeMode = PictureBoxSizeMode.StretchImage
     
        End Sub
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim bmp As Bitmap = CopyPixels1()
            If bmp IsNot Nothing Then
                Dim resukt As DialogResult = MessageBox.Show("Save image", "SnapShot", MessageBoxButtons.OKCancel)
                If resukt = DialogResult.OK Then
                    bmp.Save(pathfilename, System.Drawing.Imaging.ImageFormat.Jpeg)
                End If
            End If
        End Sub
     
     
        Private Function CopyPixels1() As Bitmap
            Dim pointSrc As Point = PointToScreen(Pic.Location)
            Dim pointDest As Point = New Point(0, 0)
            Dim bmp As New Bitmap(Pic.ClientSize.Width, Pic.ClientSize.Height)
            Using gr As Graphics = Graphics.FromImage(bmp)
                gr.CopyFromScreen(pointSrc,
               pointDest, bmp.Size)
            End Using
            PicApercu.Image = bmp
     
     
            Return bmp
        End Function
     
    End Class
    bon code...

  6. #6
    Membre confirmé
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Par défaut
    Bonsoir,

    Merci a tous les deux, vous avez pointer exactement sur l'erreur.
    Pas tres malin de ma part d'avoir oublier le nom du fichier. Je ne devais pas avoir les yeux en face des trous a cette heure tardive.
    J'ai aussi remarque les reponses entre 00:51 et 03:21, euh? Vous ne dormez jamais?

    Merci particulierement a Mabrouki pour ce bout de code qui marche parfaitement (sans le PicApercu). Je vais pouvoir me baser la dessus pour continuer.

    A+
    JLuc01

  7. #7
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par JLuc01 Voir le message
    J'ai aussi remarque les reponses entre 00:51 et 03:21, euh? Vous ne dormez jamais?
    Pour ma part, c'était une insomnie ^^

    Sinon, juste un aspect à prendre en compte dans le code fourni par MABROUKI. CopyFromScreen copie une partie de l'écran. C'est à dire que si la fenêtre est en arrière plan ou à moitié masqué, alors le résultat ne sera pas celui escompté.

  8. #8
    Membre confirmé
    Homme Profil pro
    Scientist
    Inscrit en
    Mai 2013
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Scientist
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2013
    Messages : 110
    Par défaut
    Bonjour,

    Tres juste a propos de CopyFromScreen.
    Surtout que je voudrais copier cette (image + controle) a partir d'un bouton sur une autre Form, et sans perdre trop en terme de resolution (ce point la est surement plus complique).

    Mais, cela ne fait rien, je vais creuser sur le sujet, c'est un bon point de depart pour moi.
    Et je reviendrais probablement pour plus de questions.

    A+
    JLuc01

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. sauver une image avec tkFileDialog.asksaveasfilename
    Par pierre-y dans le forum Général Python
    Réponses: 2
    Dernier message: 19/12/2012, 20h58
  2. Compresser une image en Jpeg avec Taux
    Par lolo81 dans le forum C#
    Réponses: 2
    Dernier message: 24/12/2010, 21h02
  3. Sauvegarder une image (.GIF/.JPG) avec CppWebBrowser
    Par Argol_Medusa dans le forum C++Builder
    Réponses: 12
    Dernier message: 12/12/2005, 11h27
  4. sauver une image en png
    Par greg778 dans le forum Langage
    Réponses: 7
    Dernier message: 13/11/2005, 17h22
  5. Réponses: 2
    Dernier message: 04/08/2005, 11h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo