我在上一个关于如何发送图像的问题中获得了帮助。所做的事情是首先发送图像的长度(大小),然后发送实际图像,然后它会知道何时完成。
它看起来像这样:
BinaryWriter writer = new BinaryWriter(netStream);
while (someCondition) {
Image img = SomeImage();
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
byte[] buffer = new byte[ms.Length];
ms.Seek(0, SeekOrigin.Begin);
ms.Read(buffer, 0, buffer.Length);
writer.Write(buffer.Length);
writer.Write(buffer);
这段代码来自:Angelo Geels,他在我之前的问题中帮助了我。
现在,我试图以某种方式优化它。而且,它有效。但仅当文件是 bmp(未压缩)时,我不知道为什么。
using (MemoryStream ms = PrintWindow(process))
{
writer.Write((int)ms.Length);
writer.Write(ms.GetBuffer());
}
因此 PrintWindow 将图像保存到内存流并返回。所以 ms = memorystream 里面有我的图像。
所以对我来说,这应该可以完美地工作,因为我可以做同样的事情。
我发送文件的大小(内存流的长度)。然后我在内存流中发送 byte[] 数据。
所以,是一样的。
但是,它只适用于 bmp。
我唯一能想到的是,当我以压缩格式保存时,首先写入 bmp 然后编码,这会弄乱 getbuffer() 或其他东西。
但我仍然认为它应该工作。