Преобразовать байт в изображение JPG - PullRequest
0 голосов
/ 06 декабря 2018

У меня проблема с конвертацией байта [] в файл .jpg.Когда я пытаюсь преобразовать байт, я получаю исключение в этом методе:

using (MemoryStream ms = new MemoryStream(bytes, 0, bytes.Length))
{
   ms.Write(bytes, 0, bytes.Length);
   Image image = Image.FromStream(ms, true, false);
}

Исключение:

Параметр недопустим в System.Drawing.Image.FromStream (Stream stream, Логическое использованиеEmbeddedColorManagement, логическое значение validateImageData)

Любое предложение?

1 Ответ

0 голосов
/ 06 декабря 2018

Решение *: Удалить строку: ms.Write(bytes, 0, bytes.Length);

* Если это не работает, массив bytes не содержит допустимых данных изображения.


Причина:

Эта строка инициализирует MemoryStream байтами в байтовом массиве.Он начнет поток с позиции 0 (начало):

using (MemoryStream ms = new MemoryStream(bytes, 0, bytes.Length))

, и в вашем случае его можно упростить до:

using (MemoryStream ms = new MemoryStream(bytes))

Эта строка затем записывает те же байты впоток.Это оставит ваш поток в позиции bytes.Length (конец):

ms.Write(bytes, 0, bytes.Length);

Эта строка будет пытаться прочитать изображение из потока, начиная с текущей позиции (конец).Поскольку 0 байтов не создают изображение, оно не может дать вам исключение:

Image image = Image.FromStream(ms, true, false);

Как отметил Джими, может быть лучше заключить это в метод:

public static Image ImageFromByteArray(byte[] bytes)
{
    using (MemoryStream ms = new MemoryStream(bytes))
    using (Image image = Image.FromStream(ms, true, true))
    {
        return (Image)image.Clone();
    }
}

Причина использования Clone() заключается в том, что это может вызвать проблемы при сохранении изображения, если исходный поток был удален.

...