2012-06-10 4 views
0

Я пытаюсь сокеты 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); 
} 
+0

ли ваши изображения хорошо сжать с 'gzip'? Является ли справедливая игра для повторного кодирования изображений с использованием формата с потерями, такого как JPEG? – sarnold

+0

«мерцание» имеет * ничего * делать с передачей данных по сокету. Вам, по-видимому, просто нужно использовать [двойную буферизацию] (http://en.wikipedia.org/wiki/Multiple_buffering#Double_buffering_in_computer_graphics). –

+0

Я посмотрю на gzip, спасибо. Также мерцание зеленое/синее и делает изображение искаженным или неуместным. Это не похоже на нормальное мерцание, когда ему нужна двойная буферизация. Спасибо хоть. –

ответ

0

Я закончил с использованием GZIP.

Оказывается, мерцание не было из-за этого обновляется очень быстро, но из-за того, как я был сокеты настроен. Он не посылал весь образ.

Смежные вопросы