Bonjour,
J'ai un souci pour envoyer une capture d'ecran par socket.
Voici mon code qui fait la capture :
Tout ca marche très bien, mais j'aimerai envoyer cette capture par socket.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 /* Prend la résolution utlisé */ int ScrW=Screen->Width, ScrH=Screen->Height; /* Applique la résolution */ CopieFond->SetBounds(0,0,ScrW,ScrH); /* Capture l'ecran */ HWND hWnd = GetDesktopWindow(); HDC hDC = GetDC(hWnd); /* Copie la capture dans le TImage */ BitBlt(CopieFond->Canvas->Handle,0,0,ScrW,ScrH,hDC,0,0,SRCCOPY); ReleaseDC(hWnd,hDC); CopieFond->Height = 480; CopieFond->Width = 640;
J'utilise donc un flux pour l'envoyer :
En fait le problème ce situe niveau client.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 TMemoryStream *stream = new TMemoryStream(); CopieFond->Picture->Bitmap->SaveToStream(stream); Socket->SendStream(stream);
L'évenement OnRead du socket n'est jamais déclenché.
Par contre si j'utilise ce code coté serveur :
Le client reçoit bien les données mais pas complétement :4.27 ko sur 3Mo
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 TMemoryStream *stream = new TMemoryStream(); CopieFond->Picture->Bitmap->SaveToFile("test.bmp"); stream->LoadFromFile("test.bmp"); Socket->SendStream(stream);
Voici mon code coté client :
Donc si quelqu'un peut m'eclairer...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 TMemoryStream *Stream = new TMemoryStream(); while (Socket->ReceiveLength()) { int len = Socket->ReceiveLength(); /* buffer de réception */ char *buf = new char[len]; /* Reception données */ Socket->ReceiveBuf(buf, len); /* Ecriture du buf dans le flux */ Stream->Write(buf, len); delete(buf); } CopieFond->Picture->Bitmap->LoadFromStream(Stream);
Merci d'avance![]()
Partager