Трудность сохранения изображения в MemoryStream - PullRequest
16 голосов
/ 03 октября 2011

У меня возникли трудности с сохранением потока байтов из изображения (в данном случае 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...
}

Любые идеи будут высоко оценены!

Ответы [ 4 ]

31 голосов
/ 03 октября 2011

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

using (MemoryStream m = new MemoryStream())
{
    image.Save(m, image.RawFormat);
    data = m.ToArray();
}
4 голосов
/ 03 октября 2011

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

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

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

0 голосов
/ 06 октября 2016

Попробуйте вот так, у меня все работает

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

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

0 голосов
/ 03 октября 2011

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

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

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

И это все

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...