Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C++] Conversione di una immagine in un array di bytes

  1. #1

    [C++] Conversione di una immagine in un array di bytes

    Ciao, come da oggetto, come posso convertire un file immagine in un array di bytes? Grazie.

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,362
    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

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,168
    Quote Originariamente inviata da SkyNET290897 Visualizza il messaggio
    Ciao, come da oggetto, come posso convertire un file immagine in un array di bytes? Grazie.
    Oltretutto, se lavori con Windows potrebbero essere sufficienti delle API già esistenti. Bisogna saperne di più sulla questione ovviamente.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    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:

    codice:
    // Conversione da immagine a byte                        
    MemoryStream ms = new MemoryStream();
    immagineWebCam.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);                        
    byte[] immBytes = ms.ToArray();
    Grazie.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,168
    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.

  6. #6
    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;

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2018 vBulletin Solutions, Inc. All rights reserved.