如何通过webSocket发送PictureBox图像

时间:2014-05-22 01:25:53

标签: c# websocket byte picturebox

我需要一些这方面的帮助。我捕获桌面屏幕并在PictureBox中显示它,工作正常,但我试图将PictureBox图像转换为bytes []然后转换为字符串,然后我可以通过WebSocket发送它(WS)。

1。)我的第一个问题是,PictureBox是用一个它不会转换成byte []或二进制的图像绘制的,我在那里做错了什么?,有什么方法吗?

2。)然后我遇到的第二个问题是,我需要将那些byte []转换为字符串,然后我可以将它们与其他字符串一起发送,在接收应用程序中,我会使用分隔符拆分字符串,然后我将字符串转换为byte []然后转换为图片框

WebSocket ws;

// Here goes the rest of the websocket code, which it works just fine.

private void Display(Bitmap desktop)
{
    Graphics g;
    Rectangle r;
    if (desktop != null)
    {
        // Here I'm capturing the desktop screen and filling the PictureBox1 with it.
        r = new Rectangle(0, 0, PictureBox1.Width, PictureBox1.Height);
        g = PictureBox1.CreateGraphics();
        g.DrawImage(desktop, r);
        g.Flush();

        // Here I'm trying to convert the filled PictureBox into Byte[]
        ImageConverter converter = new ImageConverter();
        byte[] imageBytes = (byte[])converter.ConvertTo(PictureBox1.Image, typeof(byte[]));

        // Here I'm trying to conver the byte[] into a string text
        string bytesString1 = System.Text.Encoding.ASCII.GetString(imageBytes);
        string firstString = "1504";
        string separator = "+";

        // Here I'm sending the message via Websocket, which includes the "firstString",
        // the "separator" so then we can use Split in the receiving application, and 
        // then the "bytesString1" which contains the image data.
        string messageToSend = firstString + separator + bytesString1;
        ws.Send(messageToSend);
    }

}

请帮忙!

1 个答案:

答案 0 :(得分:1)

不要将Bitmap绘制到PictureBox上,而是将其分配给Image属性。如果您必须使用GDI +将Bitmap绘制到PictureBox,那么您必须将Bitmap存储在某处以供日后使用。无论哪种方式,您都需要一个Image对象(请注意Bitmap继承Image)。

创建MemoryStream并在Save上致电Image,将其保存到流中。然后,您可以在该流上调用GetBuffer以获取byte数组。通常,您会传输byte数组,但如果您需要string,请致电Convert.ToBase64String