Решение *: Удалить строку: 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()
заключается в том, что это может вызвать проблемы при сохранении изображения, если исходный поток был удален.