|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2007
Messaggi: 68
|
[C#] Inviare serie di oggetti bitmap client/server
Salve a tutti.. avrei la necessità di inviare tramite TCP tra client e server una serie in successione di immagini Bitmap..questi oggetti Bitmap mi vengono fornite direttamente dalla webcam (quindi con una certa velocità di creazione dei singoli frames)..Avrei la necessità di mantenere una velocità tale da consentire una certa fluidità dell'immagine!!
Al momento invio le immagini ma risultano molto "LENTE".. ho modo di velocizzare il tutto?? mi è stato detto di inserire n elementi bitmap in coda e poi inviarle tutte in successione ma sinceramente lo trovo molto lento ugualmente!! ho altre possibilità? grazie Ultima modifica di Honik : 07-05-2010 alle 21:22. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
dovresti utilizzare un protocollo di trasporto più leggero come l' RTP che opera in real-time su udp offrendo servizi di controllo aggiuntivi
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jul 2008
Messaggi: 237
|
"Off the top of my head" direi che potresti salvare ogni immagine in un direttamente compressa sul NetworkStream su cui stai operando.
Ovviamente se la risoluzione è qualcosa di decente avrai ancora un flusso lento (oltre a un consumo di CPU piuttosto elevato, a seconda del framerate) ma se vuoi qualcosa di meglio devi comprimere e decomprimere in maniera differenziale, e dalla domanda che hai postato ho il sospetto che la cosa vada un po' oltre il tuo skill set (per ora Edit: con salvare specifico che intendo usare il metodo Image.Save, non una serializzazione classica tramite binary formatter o simili. Ultima modifica di !k-0t1c! : 05-05-2010 alle 08:40. |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Aug 2007
Messaggi: 68
|
Avevo trovato in internet metodi di compressione però usavano tutti alla fine Image.Save con conseguente salvataggio su file.. personalmente non devo salvare su file ma inviare via rete.. e questo non so proprio farlo!!
e dopo questa domanda.. in che senso in modo differenziale?? nuovoUtente riguardo all'rtp cosa sai dirmi? |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Aug 2007
Messaggi: 68
|
Ho visto in giro e ho letto qualcosa.. dove potrei trovare un'esempio dove trovo l'invio di bitmap??
Grazie |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Milano
Messaggi: 832
|
io ho appena finito una cosa del genere. via tcp/ip se ti interessa posto il codice
EDIT: non ho letto tutto ma le comprimi prima di inviarle? |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Aug 2007
Messaggi: 68
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Milano
Messaggi: 832
|
allora per inviare dal server tramite socket uso questo.
(in pratica salva l'immagine (comprimendola in png) in un memorystream e poi lo mette in un array di bytes) Codice:
byte[] data;
Socket s1;
Bitmap diff;
using (MemoryStream stream = new MemoryStream())
{
diff.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
stream.Position = 0;
data = new byte[stream.Length];
stream.Read(data, 0, Convert.ToInt32(stream.Length));
stream.Close();
}
s1.Send(data);
Codice:
byte[] b = new byte[1000000] //un valore in cui stia l' immagine
Stream stm; //lo stream del tcpclient (lo inizializzi con tuotcplient.getstream)
stm.Read(b,0,1000000);
using (MemoryStream mstream = new MemoryStream(b))
{
screen = new Bitmap(mstream);
}
unico accorgimento da prendere è gestire in modo intelligente l'invio delle "bitmap" in modo che non venga inviata la successiva prima che il client sia in grado di riceverla (puoi ad esempio processare l'immagine nel server e attendere una "richiesta del client" per inviarla) |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Aug 2007
Messaggi: 68
|
grazie mille.. ora me lo guardo per bene.. grazie ancora..
ne approfitto per chiederti.. perchè usi la clausola "using" per inizializzare le due variabili?? |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Milano
Messaggi: 832
|
semplicemente perchè non essendo utili al di fuori di quella parte di codice
usando using dovrebbe cancellarle automaticamente dalla memoria in modo da liberare risorse se hai bisogno di spiegazione chiedi pure |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:04.



















