Получение изображения из потока в Windows Mobile в C # - PullRequest
0 голосов
/ 20 августа 2011

Я пытаюсь получить изображение с сервера и хочу отобразить его в Picturebox в приложении WM.Я успешно получаю поток изображений и не могу отобразить его в PictureBox.В программе Windows у нас есть метод в классе Image, который называется FromStream (Image.FromStream), но эта функция недоступна в Compact Framework 3.5.Я также попробовал следующий код для этого:

    private void button1_Click(object sender, EventArgs e)
    {
        Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        IPAddress IP = IPAddress.Parse("192.168.1.2");
        IPEndPoint IPE = new IPEndPoint(IP, 4321);
        s.Connect(IPE);
        byte[] buffer = new byte[55296];
        s.Receive(buffer, buffer.Length, SocketFlags.None);
        MemoryStream ms = new MemoryStream(buffer);
        Image im = new Bitmap(ms); //EXCEPTION
        pictureBox1.Image = im; 
    }

Но это дает исключение.Никаких подробностей за исключением исключения не предоставляется, и VS отображает только диалоговое окно с текстом «Исключение».

Ответы [ 2 ]

0 голосов
/ 22 августа 2011

Размер вашего изображения меньше размера буфера? Если не все лишние данные потеряны, и выдается исключение.

Также можно попробовать без указания длины буфера.

        using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
        {
            IPAddress IP = IPAddress.Parse("192.168.1.2");
            IPEndPoint IPE = new IPEndPoint(IP, 4321);
            s.Connect(IPE);
            byte[] buffer = new byte[55296];
            int rec = s.Receive(buffer, SocketFlags.None);
            using (MemoryStream ms = new MemoryStream(buffer, 0, rec))
            {
                Image im = new Bitmap(ms);
                pictureBox1.Image = im;
            }
        }
0 голосов
/ 20 августа 2011

Вам необходимо проверить возвращаемое значение метода приема сокета, чтобы определить, насколько велик ваш буфер растрового изображения:

    Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    IPAddress IP = IPAddress.Parse("192.168.1.2");
    IPEndPoint IPE = new IPEndPoint(IP, 4321);
    s.Connect(IPE);
    byte[] buffer = new byte[55296];
    int rec = s.Receive(buffer, buffer.Length, SocketFlags.None);
    MemoryStream ms = new MemoryStream(buffer, 0, rec);
    Image im = new Bitmap(ms);
    pictureBox1.Image = im;

Надеюсь, это поможет.

...