Image en tableau d'octet [Résolu]

Signaler
Messages postés
64
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
10 août 2007
-
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
-
Salut,
j'ai une image (classe image) que je souhaite enregistrer dans un fichier binaire (qui contriendra d'autres infos que mon image). Pour cela je souhaite transformer mon image en tableau d'octet (après j'utilise la méthode FileStream.Write (tableau d'octet,0, taille du tableau)).

Autre point, comme je fais pour savoir quelle type d'image (jpg, bmp, png ,...) est stocké dans la classe image ?

merci d'avance

2 réponses

Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
Excuse moi, il y'a plus simple que de passer par du C# unsafe, tu peux simplement utiliser la fonction
Runtime.InteropServices.Marshal.Copy(bmpData.scan0, b, 0, bmpData.Width * bmpData.Height * bmpData.StrideSize)

Où b est ton tableau de bytes...

Julien.
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
Dans la classe image, il n'y a pas de compression, il s'agit d'un tableau d'octets organisé selon la propriété PixelFormat : 32bppArgb -> 1 octet Alpha, 3 octets RGB, etc etc...

Pour l'enregistrer dans un fichier, tu peux tout simplement utiliser
Img.Save(filename, Imaging.ImageFormat.Bmp)

Si tu veux utiliser un format personnalisé avec ton stream ca marche aussi
Img.Save(FileStream ...

Et si tu tiens vraiment à avoir un tableau d'octet (je te conseille néanmoins fortement de travailler avec la dernière proposition), tu dois transformer ton image en Bitmap
Dim bmp as Bitmap = Ctype(img, Bitmap)

Locker ses données dans un bmpData As Imaging.BitmapData:
        bmpData = bmp.LockBits(New Rectangle(0, 0, bmp.Width, bmp.Height), Imaging.ImageLockMode.ReadOnly,  bmp.PixelFormat)

Puis faire un peu de C# unsafe pour récupérer les pixels dans un tableau en te servant des propriétés scan0 pour le pointeur du début du tableau et stridesize pour la longueur d'un élément de ce bmpData.

Julien.