imはtcpで画像を送信しようとしていますが、それは時間の約50%、残りの50%は私に黒い画像を与えています。 。なぜ誰が知っていますか?そして私はこのTCPで画像を送信する
クライアント修正することができる方法:これは、関数である
Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics graphics = Graphics.FromImage(printscreen as Image);
graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size);
byte[] data = imageToByteArray(Image);
stream = client.GetStream();
int length = data.Length;
byte[] datalength = new byte[4];
datalength = BitConverter.GetBytes(length);
stream.Write(datalength, 0, 4);
stream.Write(data, 0, data.Length);
:
while ((i = stream.Read(datalength, 0, 4)) != 0)
{
byte[] data = new byte[BitConverter.ToInt32(datalength, 0)];
stream.Read(data, 0, data.Length);
this.Invoke((MethodInvoker)delegate
{
try
{
Image Screenshot = byteArrayToImage(data);
pictureBox1.Image = Screenshot;
}
catch { }
});
}
これは、画像にバイト配列を変換する関数である
public Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
サーバーを画像をバイト配列に変換する
public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
あなたは単に "stream.Read(data、0、data.Length);"を "あなたのコードで?または "while((i = stream.Read(datalength、0、4))!= 0) –
@RachelDockter: 'stream.Read(data、0、data.Length);を置き換えてください。コードは欠けているバイト数を要求し続けます。たとえば、1バイト以外のすべてを受け取った場合は、1バイトしか要求しません。 –
@RachelDockter:正常に機能する場合は、投稿の左側にあるチェックマークを押して、これを受け入れられた回答としてマークしてください。 –