Загрузка...

How to save a picture from a stream? - C#

Thread in C# created by Checkerchin Jul 12, 2018. (bumped Jul 12, 2018) 1132 views

  1. Checkerchin
    Checkerchin Topic starter Jul 12, 2018 178 Apr 16, 2017
    Доброго времени суток, расскажите пожалуйста, как мне сохранить картинку из потока.
    Пересылаю картинку по сокетам.

    Сервер:
    Code

    Socket sR = тут все правильно, оставил дабы не было вопросов что за sR
    byte[] buf = new byte[10000];
    MemoryStream stream = new MemoryStream(buf);

    sR.Bind(new IPEndPoint(IPAddress.Any, 12));
    sR.Listen(2);

    Socket clientR = sR.Accept();
    clientR.Receive(buf);
    Image i = Image.FromStream(stream);
    i.Save("screenshot", ImageFormat.Png); //Тут исключение
    clientR.Close();
    sR.Close();
    Исключение:
    Необработанное исключение типа "System.Runtime.InteropServices.ExternalException" в System.Drawing.dll

    Дополнительные сведения: В GDI+ возникла ошибка общего вида.
    Код клиента:

    Code
    if (message == "screen")
    {
    Image i = screen();

    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    byte[] buf = new byte[10000];
    MemoryStream stream = new MemoryStream(buf);
    socket.Connect("127.0.0.1", 12);

    i.Save(stream, ImageFormat.Bmp);


    socket.Send(buf);
    socket.Disconnect(false);
    socket.Close();
    }

    Функция screen():
    Code

    static Bitmap screen()
    {
    Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppRgb);
    using (Graphics gr = Graphics.FromImage(bmp)){
    gr.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y,
    0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
    }
    return bmp;
    }
     
Loading...
Top