begin process at 2010 02 10 07:38:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Réseau & Internet

 > 

Sockets

 > 

capture d'écran à distance trés lent


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

capture d'écran à distance trés lent

dimanche 10 mai 2009 à 15:08:43 | capture d'écran à distance trés lent

bazbazus

bonjour a tous je suis entrain de creer un logiciel " surveillance réseau " j'ai un problem de capture d'ecran j'utilise socket delphi et je fait des capture d'ecran dans le serveur et j'envoi l'image dans un MemoryStream code : Serveur : jpg:=TJPEGImage.Create; ImageBureau.Height := Screen.Height; ImageBureau.Width := Screen.Width; BitBlt(ImageBureau.Canvas.Handle, 0, 0,Screen.Width, Screen.Height, GetDC(GetDesktopWindow), 0, 0, SrcCopy); REDIMENSIONNEMENT_PAR_INTERPOLATION_BILINEAIRE(ImageBureau,WidhCapture,heightCapture); jpg.CompressionQuality:=QualiterCapture; jpg.GrayScale:=False; jpg.Assign(ImageBureau); //////// envoi ms:= TMemoryStream.Create; try jpg.SaveToStream(ms); ms.Position:= 0; Socket.SendText(IntToStr(ms.Size) + #0); Socket.SendStream(ms); except ms.Free; end; Client : try jpg:=TJPEGImage.Create; s:= Socket.ReceiveText; if not Recevieng then begin SetLength(sl, StrLen(PChar(s))+1); StrLCopy(@sl[1], PChar(s), Length(sl)-1); DataSize:= StrToInt(sl); Data:= TMemoryStream.Create; Delete(s, 1, Length(sl)); Recevieng:= true; end; try Data.Write(s[1], length(s)); if Data.Size = DataSize then begin Data.Position:= 0; jpg.LoadFromStream(data); ImageCapture.Picture.Bitmap.Assign(jpg); if not ArreterCapture then ClientCaptureDecran.Socket.SendText('envoi'); Data.Free; Recevieng:= false; StatusBar1.Panels[1].Text:='Capture D''ecran reçu'; end; except if not ArreterCapture then ClientCaptureDecran.Socket.SendText('envoi'); data.Free; end; jpg.free; end;
dimanche 10 mai 2009 à 15:16:37 | Re : capture d'écran à distance trés lent

bazbazus

j'ai creer un timer pour calculer les frames par second resultat : 5 images par second
dimanche 10 mai 2009 à 18:15:43 | Re : capture d'écran à distance trés lent

Bacterius

Membre Club
5 images par seconde c'est déjà pas mal ^^
Sinon, une petite mise en forme de ton code ? :)

Cordialement, Bacterius !
lundi 11 mai 2009 à 02:51:00 | Re : capture d'écran à distance trés lent

bazbazus

vnc il affiche en temp real 50 f par second au plus mdr moi je suis connecter a mon propos ordi 127.0.0.1 et je suis a 5 image par seconde .
lundi 11 mai 2009 à 19:01:22 | Re : capture d'écran à distance trés lent

Bacterius

Membre Club
Ben remet en forme ton code parce que PERSONNE ne prendra le temps de le lire sinon ...

Cordialement, Bacterius !
lundi 11 mai 2009 à 19:06:29 | Re : capture d'écran à distance trés lent

bazbazus



code Serveur :

jpg:=TJPEGImage.Create;
ImageBureau.Height := Screen.Height;
ImageBureau.Width := Screen.Width;
BitBlt(ImageBureau.Canvas.Handle, 0, 0,Screen.Width, Screen.Height, GetDC(GetDesktopWindow), 0, 0, SrcCopy);
REDIMENSIONNEMENT_PAR_INTERPOLATION_BILINEAIRE(ImageBureau,WidhCapture,heightCapture);
jpg.CompressionQuality:=QualiterCapture;
jpg.GrayScale:=false;
jpg.Assign(ImageBureau);

//////// envoi
ms:= TMemoryStream.Create;
try
jpg.SaveToStream(ms);
ms.Position:= 0;
Socket.SendText(IntToStr(ms.Size) + #0);
Socket.SendStream(ms);
except
ms.Free;
end;
//////// fin denvoi
jpg.free;


code client :

jpg:=TJPEGImage.Create;
s:= Socket.ReceiveText;
if not Recevieng then
begin
SetLength(sl, StrLen(PChar(s))+1);
StrLCopy(@sl[1], PChar(s), Length(sl)-1);
DataSize:= StrToInt(sl);
Data:= TMemoryStream.Create;
Delete(s, 1, Length(sl));
Recevieng:= true;
end;
try
Data.Write(s[1], length(s));
if Data.Size = DataSize then
begin
fps:=fps+1;
Data.Position:= 0;
jpg.LoadFromStream(data);
Data.SaveToFile('c:\also.jpg');
ImageCapture.Picture.Bitmap.Assign(jpg);
if not ArreterCapture then
ClientCaptureDecran.Socket.SendText('envoi');
Data.Free;
Recevieng:= false;
StatusBar1.Panels[1].Text:='Capture D''ecran reçu';
end;
except
if not ArreterCapture then
ClientCaptureDecran.Socket.SendText('envoi');
data.Free;
end;
jpg.free;
except
end;
lundi 11 mai 2009 à 19:43:56 | Re : capture d'écran à distance trés lent

fbalien

Membre Club
Bonjour

pour réduire la taille de l'envoie des data
1 capture de l'écran envoie au client  ( là pas de grand changement ) on garde l'image pour comparaison
2 capture de l'écran comparaison avec l'image sauvegardée et envoie des différences seulement ( marche bien si pas de gros changement par contre si ouverture d'une page en plein ecran :-( )

pour avoir déjà été confronté au pb voir mon code de prise de main a distance http://www.delphifr.com/codes/FBPDM-LOGICIEL-PRISE-MAIN-DISTANCE_40948.aspx
en fonction de la carte graphique on peut avoir un temps > 2 s entre deux captures

A+
mardi 12 mai 2009 à 20:46:09 | Re : capture d'écran à distance trés lent

bazbazus



salut fbalien j'ai trouver la solution aujourduit mais impeut bazare alors j'ai essai de creer plesieur client ( 4 client dans l'pplication d'origine ) et ( 4 application de capture serveur ) sa marche a 20 fps .
il ya un problem quon je fait la capture sur le serveur application me prend 50% de mon processeur est j'ai core de duo 3 ghz alors je dit pas quon je lancer 4 serveur .
mardi 12 mai 2009 à 20:47:49 | Re : capture d'écran à distance trés lent

bazbazus

ya pas une autre solution de capture qui prend pas beaucoup le travail de processus
jeudi 23 juillet 2009 à 16:21:22 | Re : capture d'écran à distance trés lent

darkcodersc

Je pensse que c'est la conversion qui prend le plus de temps , essay tu vai voir que lorsque tu converti ton image en jpg il se passe presque 1/2 seconde ( sa depend du pc )
o lieu de faire un screen cap et envoi en boucle essay plutot de detecter les position qui change et de modifier que la parti changer sa irra plus vite la conversion ossi
et utilise les gif c bcp moin lourd ! mias qualité moyene .
Greetz DarkCoderSc


1 2

Cette discussion est classée dans : ms, data, socket, capture, jpg


Répondre à ce message

Sujets en rapport avec ce message

Capture d'écran par socket [ par txo ] Bjr,Je voudrais savoir comment je pourrai envoyer une capture d'ecran par un TSocket (ou autre si ce n'est pas possible).Après avoir cherché un peu je Socket data et connection[] [ par mickeydisn ] Voila Deux petit question.. tout d'abor quand pour utiliser le pointer socket.datapour un entier socket.data := pointer(i); Problem TMemoryStream ( envoi fichier par socket ) [ par bazbazus ] salut a tous je suis entrain de creer un explorateur online . quon j'essai de telecharger un fichier de petit taille (300) mo normal pas de problem ma Capture d'écran à distance Problem image 50 ko [ par bazbazus ] bonjour a tous je suis entrain de creer un logiciel " surveillance réseau " j'ai un problem de capture d'ecran l'image a envoyer est trop grand sur ta Résoudre le problème des socket [ par bazbazus ] bonjour a tous language : delphi 7 problem : je utiliser les socket sur tous mes project delphi et tous mes project ont meme problem si le serveur de Comment remplir un datagrid par socket [ par ngbemartin ] le client lance une requête de sélection vers le serveur et souhaite reccupper le résultat dans un dataGrid. Comment faire? sauvegarde [ par saimslim ] salut tous le monde,comment sauvegarder mes tables(data.db,data.px,dat.xg0,data.yg0...........),dans un repertoire sous windows,et comment je peut les ShellExecute et SW_Hide [ par torest666 ] Bonjour,J'utilise ShellExecute pour effectuer une commande de conversion de fichier. Au moment de son exécution j'aimerais que la fenêtre MS Dos en s' Un quickreport en metaFile [ par leroukin ] Bonjour,Le but de ma fonction est de générer un JPEG à partir des metafiles contenus dans mon objet QuickReport.voici la fonction :procedure TModuleEx Data structure et TFrame [ par solilog ] Bjr tous,Je reviens avec une question. Plus un conseil.Je bosse sur un DB dont la table des signalétiques principaux est à multi-format (gros systèmes


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,780 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales