Image en tableau d'octet

Résolu
cs_M51 Messages postés 63 Date d'inscription dimanche 20 novembre 2005 Statut Membre Dernière intervention 10 août 2007 - 17 avril 2007 à 22:51
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 - 18 avril 2007 à 00:09
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

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
18 avril 2007 à 00:09
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.
3
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
18 avril 2007 à 00:07
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.
0
Rejoignez-nous