【发布时间】:2013-08-06 04:04:11
【问题描述】:
我在上一个关于如何发送图片的问题中获得了帮助。 所做的事情是先发送图像的长度(大小),然后发送实际图像,然后它会知道何时完成。
它看起来像这样:
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() 或其他东西。
但我仍然认为它应该有效。
【问题讨论】:
-
该代码块中缺少 usings 让我深感担忧。
标签: c# optimization networkstream binaryreader