I'm having some difficulty saving a stream of bytes from an image (in this case, a jpg) to a System.IO.MemoryStream
object. The goal is to save the System.Drawing.Image
to a MemoryStream
, and then use the MemoryStream
to write the image to an array of bytes (I ultimately need to insert it into a database). However, inspecting the variable data
after the MemoryStream
is closed shows that all of the bytes are zero... I'm pretty stumped and not sure where I'm doing wrong...
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...
}
Any insights will be much appreciated!
If the purpose is to save the image bytes to a database, you could simply do:
And then plug in your database logic to save the bytes.
Try this way, it works for me
Well instead of a Image control, I used a Panel Control.
I found for another reason this article some seconds ago, maybe you will find it useful: http://www.codeproject.com/KB/recipes/ImageConverter.aspx
Basically I don't understand why you try to write an empty array over a memory stream that has an image. Is that your way to clean the image?
If that's not the case, read what you have written in your memorystream with ToArray method and assign it to your byte array
And that's all
To load data from a stream into an array, you read, not write (and you would need to rewind). But, more simply in this case,
ToArray()
: