J'ai des difficultés à enregistrer un flux d'octets d'une image (dans ce cas, un jpg) dans un objet System.IO.MemoryStream
. Le but est d’enregistrer le System.Drawing.Image
dans une MemoryStream
, puis d’utiliser la MemoryStream
pour écrire l’image dans un tableau d’octets (j’ai besoin de l’insérer dans une base de données). Cependant, l'inspection de la variable data
après la fermeture de la MemoryStream
montre que tous les octets sont nuls ... Je suis plutôt perplexe et je ne suis pas sûr de savoir où je me trompe ...
using (Image image = Image.FromFile(filename))
{
byte[] data;
using (MemoryStream m = new MemoryStream())
{
image.Save(m, image.RawFormat);
data = new byte[m.Length];
m.Write(data, 0, data.Length);
}
// Inspecting data here shows the array to be filled with zeros...
}
Toute idée sera très appréciée!
Pour charger les données d'un flux dans un tableau, vous lisez , pas écrivez (et vous auriez besoin de revenir en arrière). Mais, plus simplement dans ce cas, ToArray()
:
using (MemoryStream m = new MemoryStream())
{
image.Save(m, image.RawFormat);
data = m.ToArray();
}
Si le but est de sauvegarder les octets de l'image dans une base de données, vous pouvez simplement faire:
byte[] imgData = System.IO.File.ReadAllBytes(@"path/to/image.extension");
Et branchez ensuite la logique de votre base de données pour sauvegarder les octets.
Essayez de cette façon, ça marche pour moi
MemoryStream ms = new MemoryStream();
Bitmap bmp = new Bitmap(panel1.Width, panel1.Height);
panel1.DrawToBitmap(bmp, panel1.Bounds);
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] Pic_arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(Pic_arr, 0, Pic_arr.Length);
ms.Close();
Bien au lieu d'un contrôle d'image, j'ai utilisé un contrôle de panneau.
J'ai trouvé pour une autre raison cet article il y a quelques secondes, vous le trouverez peut-être utile: http://www.codeproject.com/KB/recipes/ImageConverter.aspx
En gros, je ne comprends pas pourquoi vous essayez d'écrire un tableau vide sur un flux de mémoire contenant une image. Est-ce votre façon de nettoyer l'image?
Si ce n'est pas le cas, lisez ce que vous avez écrit dans votre méthode memorystream with ToArray et affectez-le à votre tableau d'octets.
Et c'est tout