Convertir une image en String pour l'enregistrer dans un fichier texte
revlam
Messages postés13Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention13 avril 2009
-
18 oct. 2005 à 18:56
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 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
A voir également:
Convertir une image en String pour l'enregistrer dans un fichier texte
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)