Я пытаюсь сокеты C# для отправки изображений. Он работает, но он нестабилен. Изображения, посланные через, довольно большие и обновляются очень быстро, что заставляет его мерцать время от времени. Я ищу способ сжать отправленные данные, если это возможно. Я использую этот код:Сжатие данных, отправленных через сокет C#?
стороны сервера:
System.IO.MemoryStream stream = new System.IO.MemoryStream();
// !! Code here that captures the screen !!
bitmap.Save(stream, myImageCodecInfo, myEncoderParameters);
byte[] imageBytes = stream.ToArray();
stream.Dispose();
// Send the image
clientSocket.Send(imageBytes);
// Empty the byte array?
for (int i = 0; i < imageBytes.Length; i++)
{
imageBytes[i] = 0;
}
стороны клиента:
private void OnConnect(IAsyncResult ar)
{
try
{
MessageBox.Show("Connected");
//Start listening to the data asynchronously
clientSocket.BeginReceive(byteData,
0,
byteData.Length,
SocketFlags.None,
new AsyncCallback(OnReceive),
null);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Stream Error",MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void OnReceive(IAsyncResult ar)
{
try
{
int byteCount = clientSocket.EndReceive(ar);
// Display the image on the pictureBox
MemoryStream ms = new MemoryStream(byteData);
pictureBox1.Image = Image.FromStream(ms);
}
catch (ArgumentException e)
{
//MessageBox.Show(e.Message);
}
clientSocket.BeginReceive(byteData,0,byteData.Length,SocketFlags.None,new AsyncCallback(OnReceive),null);
}
ли ваши изображения хорошо сжать с 'gzip'? Является ли справедливая игра для повторного кодирования изображений с использованием формата с потерями, такого как JPEG? – sarnold
«мерцание» имеет * ничего * делать с передачей данных по сокету. Вам, по-видимому, просто нужно использовать [двойную буферизацию] (http://en.wikipedia.org/wiki/Multiple_buffering#Double_buffering_in_computer_graphics). –
Я посмотрю на gzip, спасибо. Также мерцание зеленое/синее и делает изображение искаженным или неуместным. Это не похоже на нормальное мерцание, когда ему нужна двойная буферизация. Спасибо хоть. –