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?
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?
sous quel format sont ces images ?
Si tu peux les afficher dans une picturebox, aucun problème avec SavePicture (aide en ligne)
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?
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....
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
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 :
- Extraire chacune des images et la sauvegarder dans un fichier disque
- Réouvrir le fichier et tester le type d'image dont il s'agit
- Modifier l'extension du fichier pour lui affecter la bonne extension
- Eventuellement, recharger l'image pour la visualiser
Pour le step 1, je propose le code suivant :
wMain est la feuille qui contient le controle ImageList dont le nom est imlLarge.
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
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:
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).
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>
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)
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.
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
La lecture de l'aide en ligne pour SavePicture (voir ma 1ère réponse) était suffisante :
et donnait des explications allant même au delà, en quelques motsIf 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.![]()
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.
Merci beaucoup c'est vraiment super ce que vous faites.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager