我需要一些这方面的帮助。我捕获桌面屏幕并在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);
}
}
请帮忙!
答案 0 :(得分:1)
不要将Bitmap
绘制到PictureBox
上,而是将其分配给Image
属性。如果您必须使用GDI +将Bitmap
绘制到PictureBox
,那么您必须将Bitmap
存储在某处以供日后使用。无论哪种方式,您都需要一个Image
对象(请注意Bitmap
继承Image
)。
创建MemoryStream
并在Save
上致电Image
,将其保存到流中。然后,您可以在该流上调用GetBuffer
以获取byte
数组。通常,您会传输byte
数组,但如果您需要string
,请致电Convert.ToBase64String
。