Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [vb.net 2012] basse prestazioni per copiare lo schermo su una bitmap (graphics.copyfromscreen)!
Forum - C# / VB.NET - [vb.net 2012] basse prestazioni per copiare lo schermo su una bitmap (graphics.copyfromscreen)!

Avatar
masterz (Normal User)
Newbie


Messaggi: 8
Iscritto: 28/02/2011

Segnala al moderatore
Postato alle 12:26
Domenica, 10/11/2013
Salve a tutti , mi ritrovo con questo problema ,
vorrei avere un riquadro sulla mia form in cui e' visibile una parte dello schermo in tempo reale ,
per fare questo ho messo in loop il codice seguente :
Codice sorgente - presumibilmente VB.NET

  1. Dim bmpQuadro As Bitmap = New Bitmap(320, 320)
  2.                 Dim graph As Graphics = Nothing
  3.                 graph = Graphics.FromImage(bmpQuadro)
  4.                 graph.CopyFromScreen(BASE.X, BASE.Y, 0, 0, bmpQuadro.Size) ' copia la porzione di schermo
  5.                 graph.Dispose()



che poi un altra funzione ( anzi un thread apposito ) , dopo aver elaborato il bitmap , lo disegna continuamente sul form .

il problema e' che non riesco ad arrivare a 30 immagini per secondo , quindi la porzione di schermo non si vede fluidamente . Non e' il modo giusto di fare questa cosa .

Qualcuno sa consigliarmi un altro metodo per fare questo , che sia piu veloce ?

Ultima modifica effettuata da masterz il 10/11/2013 alle 12:28


programmatore solitario
PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 695
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 2:26
Martedì, 12/11/2013
non so, ma forse è il loop che ti frega, e appesantisce l'esecuzione,
invece che in un loop prova a inserire il codice nel gestore di un evento (tipo quando la porzione di schermo cambia, e quindi effettivamente la bitmap va aggaiornata)


Le cose si fanno per bene o non si fanno affatto
PM Quote
Avatar
masterz (Normal User)
Newbie


Messaggi: 8
Iscritto: 28/02/2011

Segnala al moderatore
Postato alle 12:52
Martedì, 12/11/2013
e' un bel problema , le sto provando tutte ,

riesco ora ad arrivare a 30 screen per secondo ,
ma il problema principale e' che richiamando graph.CopyFromScreen , si incanta tutta la form per un istante , nonostante abbia lanciato la funzione da un thread separato da quello principale ,
col risultato che in un'altra form , dove ho un altro loop che mi disegna continuamente le bitmap appena screenshoottate come base  piu' altri oggetti come rettangoli , linee , altre bitmap incollate piu' vari effetti grafici ,
in cui riesco a fare 90-100 cicli al secondo ... inizia ad essere scattosa pure quella !
Si nota anche muovendo la finestra di qualsiasi FORM , anche esterno alla mia applicazione , che durante il loop che fa screenshot , vanno tutte a scatti , e' come se CopyFromScreen incantasse tutto il sistema GDI di windows che disegna il desktop e le finestre ... ( e' GDI che disegna le finestre su windows... vero ?)


Ho provato anche ad usare directX per gli screenshot ... stesso risultato.


programmatore solitario
PM Quote
Avatar
masterz (Normal User)
Newbie


Messaggi: 8
Iscritto: 28/02/2011

Segnala al moderatore
Postato alle 14:04
Martedì, 12/11/2013
accidenti , la soluzione era molto piu' semplice del previsto ,

disabilitare AERO di win7

sono passato da 30fps a 180.

8-| ho perso una giornata di lavoro per questa cavolata.


programmatore solitario
PM Quote