cs_M51
Messages postés63Date d'inscriptiondimanche 20 novembre 2005StatutMembreDernière intervention10 août 2007
-
17 avril 2007 à 22:51
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDerniè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 ?
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 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)
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 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.