Convertir une image en String pour l'enregistrer dans un fichier texte

revlam Messages postés 13 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 13 avril 2009 - 18 oct. 2005 à 18:56
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 18 oct. 2005 à 20:38
Bonjour,



dans le programme que je code en ce moment, j'ai besoin d'enregistrer
une image dans un fichier avec d'autres informations. Ainsi, je
souhaite l'enregistré dans une string pour ensuite récupéré l'image via
un "Input #X, Var" pour ensuite attribuer mon image dans un contrle
image en faisant bêtement Image.Picture = Var. J'utilise pour cela la
classe téléchargeable ici : http://www.vbfrance.com/code.aspx?ID=31949



Pouvez vous l'aider ?

Revlam

1 réponse

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 oct. 2005 à 20:38
Salut
Un fichier image est composé de bytes qui représentent l'organisation et les attributs des pixels de l'image.
Ces bytes sont des chiffres allant de 0 à 255.
Il suffit donc de lire chaque Byte de l'image et de sauver sous forme texte ce chiffre.
A chaque Byte lu, il faudra générer une chaine contenant ton chiffre, suivi d'un séparateur comme une virgule, et ensuite, stocker ça dans ton fichier texte. --> Donc, tu te retrouveras avec un fichier texte qui pourra atteindre 4 fois la taille de l'image !
Exemple : si tu lis les 3 bytes (octets) contenants 18 221 et 96, tu écriras "18,221,96" soit 9 octets pour 3 lus
Le code que je te propose marche avec n'importe quel fichier, graphique ou non. (tiens ! je pourrais appeler ça un 'antiZip')

Dim monByte As Byte, maChaine As String, NoFichier1 As Integer
' Lecture de l'image vers une chaine, en mémoire
NoFichier = FreeFile
Open "monFichier.BMP" For Binary As #NoFichier
For r = 1 To FileLen(1)
Get #NoFichier, r, monByte
maChaine = maChaine & CStr(monByte) & ","
Next r
Close #NoFichier
' Ecriture de la chaine vers un fichier
NoFichier = FreeFile
Open "monFichier.TXT" For Output As #NoFichier
Print #NoFichier, maChaine
Close #NoFichier

Ensuite, pour relire ton fichier texte et refabriquer ton image, il faudra relire la chaine :
NoFichier = FreeFile
Open "monFichier.TXT" For Input As #NoFichier
Line Input #NoFichier, maChaine
Close #NoFichier
Puis, il faudra reconvertir chaque chiffre en Byte :
' Décompose chaque chiffre dans une cellule du tableau
Dim Tableau() As String
Tableau = Split(maChaine, ",")
' Recréation de la chaine de Bytes :
Dim mesBytes() As Byte
Redim mesBytes(UBound(Tableau))
For r = LBound(Tableau) To UBound(Tableau)
mesBytes(r) = CByte(Tableau(r))
Next r
## La fonction Split n'accepte rien d'autre que des String, pas possible de faire le Split directement en Byte

Je pense que tu dois pouvoir donner ton tableau de Bytes directement à un objet Image, mais je ne connais pas (je ne suis pas très graphique)
Si tu as besoin de repasser par un fichier, il te suffit d'écrire tes Bytes comme ceci :
NoFichier = FreeFile
Open "monNouveauFichier.BMP" For Binary As #NoFichier
Put #NoFichier, , mesBytes
Close #NoFichier

Ca n'est surement pas la seule solution à cette question.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
0
Rejoignez-nous