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 6 et antérieur Discussion :

[VB6] Récupérer les images à partir d'une ImageList


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club Avatar de mbzhackers
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 87
    Points : 58
    Points
    58
    Par défaut [VB6] Récupérer les images à partir d'une ImageList
    Salut, j'ai un contrôle ImageList contenant une collection d'images. Est-ce possible d'exporter une image de l'ImageList vers un fichier BMP ou JPG?

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    sous quel format sont ces images ?
    Si tu peux les afficher dans une picturebox, aucun problème avec SavePicture (aide en ligne)

  3. #3
    Membre du Club Avatar de mbzhackers
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 87
    Points : 58
    Points
    58
    Par défaut
    Je ne sais pas sous quel format elles sont, elles sont intégrées dans l'ImageList. Comment savoir si je peux les récupérer dans une picturebox?

  4. #4
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Là, je crois bien que tu veux aller plus vite que la musique...
    Sais-tu créer une picturebox et lui attribuer une image ?
    Et ton imagelist, d'où vient-elle, alors ?
    Il y a un minimum à savoir....

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 147
    Points
    20 147
    Par défaut
    bonsoir

    en complément de la réponse de jmfmarques , ci joint un exemple pour afficher le 1er item de l'ImageList dans un PictureBox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Picture1.Picture = ImageList1.ListImages(1).Picture

    bonne soiree
    michel

  6. #6
    Membre habitué Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Points : 139
    Points
    139
    Par défaut
    Le type de la plupart des fichiers images est écrit dans l'entête de ce fichier. Cependant, pour le lire, il faut que ce soit un fichier disque (en tout cas, moi je ne sais pas - de façon simple - aller lire dans le bloc mémoire d'un objet Picture).

    Voici donc ce que je propose :
    1. Extraire chacune des images et la sauvegarder dans un fichier disque
    2. Réouvrir le fichier et tester le type d'image dont il s'agit
    3. Modifier l'extension du fichier pour lui affecter la bonne extension
    4. Eventuellement, recharger l'image pour la visualiser


    Pour le step 1, je propose le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Img As ListImage
    For Each Img In wMain.imlLarge.ListImages
        SavePicture Img.Picture, App.Path & "\Image" & Format(q.Index, "00")
    Next
    wMain est la feuille qui contient le controle ImageList dont le nom est imlLarge.

    Ensuite, il faut aller chercher dans chacun des fichier le type d'image (ou autres). C'est un peu plus délicat, mais ça se fait. Le code que j'utilise pour reconnaître les différents types que je connais est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <ul><li style="">BMP : Left(sDummy, 2) = "BM"</li><li style="">JPEG : UCase(Mid(sDummy, 7, 4)) = "JFIF"</li><li style="">EMF : Mid(sDummy, 42, 3) = "EMF"</li><li style="">WMF : Left(sDummy, 4) = "×ÍÆš"</li><li style="">PNG : Left(sDummy, 4) = "‰PNG"</li><li style="">GIF : Left(sDummy, 3) = "GIF"</li><li style="">TIFF : (Left(sDummy, 4) = "II*" & vbNullChar) or (Left(sDummy, 4) = "MM" & vbNullChar & "*")</li><li style="">PDF : Left(sDummy, 4) = "%PDF"</li><li style="">WAV : Left(sDummy, 4) = "RIFF"</li></ul>
    Notez que les deux derniers types ne sont pas des images (j'ai fait ce code pour autre chose), et que certains formats ne sont pas connus de VB, notamment TIFF et PNG. D'autre part les ImageList ne supportent pas les images vertorielles (EMF et WMF).

    On ouvre les fichiers en mode binaire et on lit les 50 premiers octets(il en faut au moins 45 pour tester les EMF) pour reconnaître le type

    Il suffit ensuite de modifier le nom de chaque fichier avec l'extension qui va bien avec l'instruction Name (APRES avoir refermé le fichier!).

    Vous pouvez ensuite visualiser les images dans un PictureBox ou un contrôle Image en utilisant Set [Controle].Picture = NomFichier

    Voilà ce que pourrait être le code complet (sauf visualisation)
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
        Dim nFile%, sDummy$, sFileType$, sFileName$
        Dim Img As ListImage
     
        For Each Img In wMain.imlLarge.ListImages
            'Extraction de l'image vers un fichier
            sFileName = App.Path & "\Image" & Format(Img.Index, "00")
            SavePicture Img.Picture, sFileName
     
            'Lecture de l'entête du fichier
            nFile = FreeFile()
            sDummy = Space$(50)
            Open NomFichier For Binary Access Read As #nFile
            Get #nFile, , sDummy        'Attention aux DEUX virgules
            Close nFile
     
            'Traitement des entêtes de fichier et reconnaissance du type
            If Left(sDummy, 2) = "BM" Then
                sFileType = "BMP"
            ElseIf UCase(Mid(sDummy, 7, 4)) = "JFIF" Then
                sFileType = "JPG"
            ElseIf Left(sDummy, 4) = "×ÍÆš" Then
                sFileType = "WMF"
            ElseIf Mid(sDummy, 42, 3) = "EMF" Then
                sFileType = "EMF"
            ElseIf Left(sDummy, 4) = "%PDF" Then
                sFileType = "PDF"
            ElseIf Left(sDummy, 4) = "‰PNG" Then
                sFileType = "PNG"
            ElseIf Left(sDummy, 3) = "GIF" Then
                sFileType = "GIF"
            ElseIf Left(sDummy, 4) = "RIFF" Then
                sFileType = "WAV"
            ElseIf Left(sDummy, 4) = "II*" & vbNullChar Then
                sFileType = "TIF"
            ElseIf Left(sDummy, 4) = "MM" & vbNullChar & "*" Then
                sFileType = "TIF"
            Else
                sFileType = "---"
            End If
     
            'Mise à jour du nom du fichier
            Name sFileName As sFileName & "." & sFileType
     
        Next
    Nota : après un essai de ce code, il semblerait que SavePicture produise TOUJOURS des BMP : j'ai chargé des GIF et des JPG dans mon contrôle, et à l'exécution, ils sont détectés comme des BMP. Et après un examen avec un éditeur binaire, c'est vérifié. Cela n'enlève rien au fait qu'on peut récupérer les images. Ce code a été fait pour DataLib, un gestionnaire d'images dans une base de données Access qu'on peut trouver en http://mgd.software.free.fr.

  7. #7
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    La lecture de l'aide en ligne pour SavePicture (voir ma 1ère réponse) était suffisante :
    If a graphic was loaded from a file to the Picture property of an object, either at design time or at run time, and it’s a bitmap, icon, metafile, or enhanced metafile, it's saved using the same format as the original file. If it is a GIF or JPEG file, it is saved as a bitmap file.
    Graphics in an Image property are always saved as bitmap (.bmp) files regardless of their original format.
    et donnait des explications allant même au delà, en quelques mots

  8. #8
    Membre habitué Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Points : 139
    Points
    139
    Par défaut
    C'est bien pour ça que j'utilise une base de données et non pas des ImageList pour stocker les images que je veux pouvoir exporter.

    Mais ceci n'est pas l'objet de la présente discussion, alors je n'irai pas plus loin sur le sujet.

  9. #9
    Membre du Club Avatar de mbzhackers
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 87
    Points : 58
    Points
    58
    Par défaut
    Merci beaucoup c'est vraiment super ce que vous faites.

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

Discussions similaires

  1. Récupérer des images à partir d'une BDD SQLite
    Par Henry22 dans le forum Android
    Réponses: 2
    Dernier message: 20/06/2011, 13h36
  2. [MySQL] récupérer des images à partir d'une base de données mysql
    Par j_esti dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 21/04/2011, 13h34
  3. Comment récupérer les xml à partir d'une référence web
    Par kokokaka dans le forum Services Web
    Réponses: 3
    Dernier message: 03/09/2009, 17h17
  4. Réponses: 7
    Dernier message: 07/08/2009, 15h28
  5. Réponses: 2
    Dernier message: 02/03/2007, 14h42

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