Transformer une image .bmp en un tableau de byte dans Compact framework

Signaler
Messages postés
7
Date d'inscription
lundi 17 août 2009
Statut
Membre
Dernière intervention
3 novembre 2009
-
Messages postés
8
Date d'inscription
dimanche 4 juillet 2010
Statut
Membre
Dernière intervention
4 avril 2012
-
Salut

Comment transformer une image d'extension bmp (noir et blanc, niveau de gri, image couleur) en un tableau de byte en C# en Compact framework, pour que je puisse appliquer sur ce tableau d'algorithme AES.

et la meme chose pour l'opération inverse (cad de tableau de byte à une image .bmp couleur, niveau de gri, noir et blanc).

j'ai utilisé ces instructions pour passé de l'image vers le tableau:
FileStream fs = File.OpenRead(textBox7.Text);
int width = img.Width;
int height = img.Height;
byte[] pl = new byte[width * height];
fs.Read(pl, 0, width * height);
fs.Close();

et j'ai utilisé Bitmap pour l'affichage mais j'ai l'exception dans le 2eme ligne, qui me dis :"ArgumentException n'a pas été gérée,La valeur n'est pas comprise dans la plage attendue." , pourtant les valeurs de mon tableau entre 0 et 255:
System.IO.MemoryStream ms = new System.IO.MemoryStream(byte tab);
Bitmap hh = new Bitmap(ms);
pictureBox2.Image = hh;

Merci

13 réponses

Messages postés
47
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
6 novembre 2009
2
Bonjour,

Je ne sais pas si ça peut t'aider mais je pense que pour convertir ton bitmap en byte[] tu peux essayer ça:
System.Drawing.Bitmap bmp = GetTheBitmap();
System.IO.MemoryStream stream = new System.IO.MemoryStream();
bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
stream.Position = 0;
byte[] data = (byte[])System.ComponentModel.TypeDescriptor.GetConverter(bmp).ConvertTo(bmp, typeof(byte[]));


Cependant l'header du format Bitmap ets stocké dans ton byte[], il faudra le virer à la main.
Ceci pourra peut-être t'aider pour la taille de l'en-tête: Format BMP

Bon courage,
Messages postés
31
Date d'inscription
vendredi 17 avril 2009
Statut
Membre
Dernière intervention
19 septembre 2009

Merci DrIvory, mais je pense que la méthode save n'existe pas dans le Compact framework, elle est uniquement dans le winform, et moi j'applique mon application sur l'emulateur pocket pc 2003.
Messages postés
47
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
6 novembre 2009
2
Désolé je ne connais pas trop le Compact Framework,

Je ne te donnais que l'équivalent que je connaissais ^^'.

Bon courage.
Messages postés
31
Date d'inscription
vendredi 17 avril 2009
Statut
Membre
Dernière intervention
19 septembre 2009

désolé j'ai testé et la méthode save existe, mais l'erreur est dans GetTheBitmap() et GetConverter(bmp), le c# ne le connais pas
, je pense que c'est le compact framework qui n'a pas ces méthodes
Messages postés
31
Date d'inscription
vendredi 17 avril 2009
Statut
Membre
Dernière intervention
19 septembre 2009

et pour l'opération inverse (cad de tableau de byte à une image .bmp )?
Messages postés
47
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
6 novembre 2009
2
Je me demandais,

Essaye ça (pour ta première question):

MemoryStream ms = new MemoryStream();
yourBitmap.Save( ms, ImageFormat.Bmp );
byte[] bitmapData = ms.ToArray();
Messages postés
47
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
6 novembre 2009
2
Pour ta 2ème question,

essaye ceci:

TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap));

Bitmap bitmap1 = (Bitmap)tc.ConvertFrom(byteArray);


ou

ImageConverter ic = new ImageConverter();

Image img = (Image)ic.ConvertFrom(byteArray);

Bitmap bitmap1 = new Bitmap(img);


En espérant que cela t'aide :/
Messages postés
31
Date d'inscription
vendredi 17 avril 2009
Statut
Membre
Dernière intervention
19 septembre 2009

toujour le problème avec le comapact framework, ou ImageConverter est introuvable.
mais merci comme meme DrIvory pour ton aide, merci
Messages postés
47
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
6 novembre 2009
2
Bon ben désolé :/

J'espère pour toi qu'un pro du Compact FrameWork passera
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
16
D'apres le msdn, la méthode Save existe bien dans le compact framework....tu as deux surcharges disponibles
http://msdn.microsoft.com/en-us/library/system.drawing.image.save.aspx
Messages postés
31
Date d'inscription
vendredi 17 avril 2009
Statut
Membre
Dernière intervention
19 septembre 2009

oui c'est vraie, save existe dans le Compact framework, mais le problème est dans la méthode GetConverter de System.ComponentModel.TypeDescriptor pour transformer l'image bmp en tableau de byte qui n'existe pas dans le compact framework et aussi la méthode ImageConverter est introuvable dans compact framework pour faire l'opération inverse.

meme j'ai pas trouvé des équivalences de ses méthodes dans le compact framework
Messages postés
8
Date d'inscription
dimanche 4 juillet 2010
Statut
Membre
Dernière intervention
4 avril 2012

Private Function PictureBoxImageToBytes(ByVal picBox As PictureBox) As Byte()
If (picBox IsNot Nothing) AndAlso (picBox.Image IsNot Nothing) Then
Dim bmp As New Bitmap(picBox.Image)
Dim ms As New System.IO.MemoryStream()
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp)
picBytes = ms.ToArray()
ms.Close()
ms.Dispose()
Return picBytes
Else
Return Nothing
End If
End Function


voila ce code est testé a 100%
Messages postés
8
Date d'inscription
dimanche 4 juillet 2010
Statut
Membre
Dernière intervention
4 avril 2012

pour l'ajouter dans votre base de donnée vous appeler la fonction comme ceci :
dr(19) = PictureBoxImageToBytes(PictureBox1)