none
Преобразовать поток байтов в изображение .NET C# RRS feed

  • Вопрос

  • Здравствуйте! У меня проблема такого плана. Работаю с сокетами. С клиента на сервер приходит изображение в виде потока байтов. Как мне его преобразовать на стороне сервера в изображение? Пробовал множество вариантов. Последний способ, который я попробовал это:

    TypeConverter tc = TypeDescriptor.GetConverter(typeof(Bitmap));
                Bitmap bitmap1 = (Bitmap)tc.ConvertFrom(bytesArray);

    Через MemoryStream также была попытка. Везде одно и тоже исключение:

    Необработанное исключение типа "System.ArgumentException" в System.Drawing.dll

    Дополнительные сведения: Недопустимый параметр.

    Буду очень признателен за совет!

    9 ноября 2015 г. 16:13

Ответы

  • Думаю, Вам больше подойдет класс TcpClient. Поищите книгу ".NET Сетевое программирование для профессионалов" коллектива авторов.
    • Изменено AleksandrAM 9 ноября 2015 г. 23:56
    • Помечено в качестве ответа VitalySer 11 ноября 2015 г. 16:03
    9 ноября 2015 г. 23:52

Все ответы

  • у Bitmap есть конструктор с потоком на входе.

    https://msdn.microsoft.com/ru-ru/library/z7ha67kw(v=vs.110).aspx

    9 ноября 2015 г. 16:33
  • Обнаружил такой момент. Размер массива байтов на клиенте перед отправкой и на сервере после получения немного разные. Приходит немногим меньше, чем отправлял клиент. Может в этом проблема?
    9 ноября 2015 г. 17:14
  • Скорее всего. "Немного меньше" вполне достаточно чтоб исказить изображение что обычно приводит к невозможности его загрузки. Проверяйте массив, должно быть точное совпадение с оригиналом.

    This posting is provided "AS IS" with no warranties, and confers no rights.

    9 ноября 2015 г. 17:22
    Модератор
  • Да, приходит все время меньше, чем требуется. Как можно решить эту проблему? Первый раз просто с сокетами работаю. Использую при отправке/приеме функции Socket.Send()/Socket.Recieve().
    9 ноября 2015 г. 17:24
  • Думаю, Вам больше подойдет класс TcpClient. Поищите книгу ".NET Сетевое программирование для профессионалов" коллектива авторов.
    • Изменено AleksandrAM 9 ноября 2015 г. 23:56
    • Помечено в качестве ответа VitalySer 11 ноября 2015 г. 16:03
    9 ноября 2015 г. 23:52
  • Думаю, Вам больше подойдет класс TcpClient. Поищите книгу ".NET Сетевое программирование для профессионалов" коллектива авторов.

    Именно этим я и решил все свои проблемы. Я переписал все с использованием TcpClient и TcpListener. И все заработало!

    Всем большое спасибо!

    • Изменено VitalySer 11 ноября 2015 г. 16:04
    11 ноября 2015 г. 16:04