Ciao, come da oggetto, come posso convertire un file immagine in un array di bytes? Grazie.
Ciao, come da oggetto, come posso convertire un file immagine in un array di bytes? Grazie.
Normalmene un file immagine contiene i colori già in bytes preceduti da un header. Poi ovviamente dipende da formato del file. Se posti qualche info in più magari ti si può dare un mano.
Per gli Spartani e Sparta usa spartan Il mio github
La situazione è questa, l'ambiente di sviluppo è l'Arduino Create (quindi linguaggio C++), la piattaforma è una scheda UP Squared.
In sostanza vorrei realizzare lo streaming remoto da una webcam connessa alla board e le immagini (i singoli frame) vengono catturati tramite l'uso della libreria OpenCV.
Le immagini sono in formato "Mat" e quello che vorrei fare è convertirle in bytes per inviarle all'applicazione client scritta in Visual C# che lavora su una macchina Windows 10.
Avevo fatto una cosa analoga in Visual C# dove il server era presente su una macchina Windows ed inviava l'immagine come un array di bytes ai client presenti sia su macchine Windows che Android.
Nello specifico, sul server Visual C# utilizzavo questa sintassi:
Grazie.codice:// Conversione da immagine a byte MemoryStream ms = new MemoryStream(); immagineWebCam.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] immBytes = ms.ToArray();
Beh, erano informazioni da dare subito, non pensi ...?
Con queste due funzioni dovrebbe andare la conversione nei due sensi
byte* matToBytes(Mat image)
{
int size = image.total()* image.elemSize();
byte* bytes =newbyte[size];
std::memcpy(bytes,image.data,size *sizeof(byte));
}
Mat bytesToMat(byte* bytes,int width,int height)
{
Mat image =Mat(height,width,CV_8UC3,bytes).clone();
return image;
}
ma devi pensare tu a convertire in C# la parte in ricezione. Mi sembra scontato che non potrai utilizzare il codice per il Jpeg ma dovrai utilizzare OpenCV anche lato C# dato che l'immagine è di tipo trattato da quella libreria.
Ultima modifica di oregon; 08-08-2018 a 12:15
No MP tecnici (non rispondo nemmeno!), usa il forum.
Grazie per la risposta.
Lato client utilizzo questa sintassi.
codice:int bytesRec = client.Receive(bytes); // Ricezione della risposta da parte del server // Ricevo l'immagine e la stampo nella pictureBox MemoryStream ms = new MemoryStream(bytes); System.Drawing.Image bytesImm = System.Drawing.Image.FromStream(ms); pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox1.Image = bytesImm;