画像の送信方法に関する以前の質問で助けを得ました。行われたことは、最初に画像の長さ(サイズ)を送信し、次に実際の画像を送信することでした。その後、いつ完了したかがわかります。
IT は次のようになります。
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 = 私のイメージを含むメモリストリーム。
だから私にとってこれは完璧に機能するはずです.
ファイルのサイズ (メモリストリームの長さ) を送信します。次に、メモリストリームで byte[] データを送信します。
だから、それは同じことです。
ただし、bmp でのみ機能します。
私が考えることができる唯一のことは、圧縮形式で保存すると、bmpが最初に書き込まれてからエンコードされ、getbuffer()または何かが台無しになるということです。
しかし、私はまだそれが機能するはずだと思います。