Сложность Сохранение изображения в MemoryStream

Мне сложно сэкономить поток байтов от изображения (в данном случае, jpg) до объекта System.IO.MemoryStream. Цель состоит в том, чтобы сохранить System.Drawing.Image в MemoryStream, а затем использовать MemoryStream для записи изображения в массив байтов (в конечном итоге мне нужно вставить его в базу данных). Однако проверка переменной data после закрытия MemoryStream показывает, что все байты равны нулю... Я довольно тупой и не уверен, где я делаю неправильно...

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...
}

Любые идеи будут очень оценены!

Ответы

Ответ 1

Чтобы загрузить данные из потока в массив, вы читаете, а не записываете (и вам нужно перемотать назад). Но, более просто в этом случае, ToArray():

using (MemoryStream m = new MemoryStream())
{
    image.Save(m, image.RawFormat);
    data = m.ToArray();
}

Ответ 2

Если целью является сохранение байтов изображения в базе данных, вы можете просто сделать:

byte[] imgData = System.IO.File.ReadAllBytes(@"path/to/image.extension");

И затем подключите логику базы данных, чтобы сохранить байты.

Ответ 3

Я нашел по другой причине эту статью несколько секунд назад, может быть, вы найдете ее полезной: http://www.codeproject.com/KB/recipes/ImageConverter.aspx

В принципе, я не понимаю, почему вы пытаетесь написать пустой массив по потоку памяти с изображением. Это ваш способ очистить изображение?

Если это не так, прочитайте то, что вы написали в своем запоминающем потоке с помощью метода ToArray, и назначьте его вашему массиву байтов

И что все

Ответ 4

Попробуйте этот способ, он работает для меня

                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();

Ну, вместо управления изображением я использовал панель управления.