Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237

    [VB.NET] Estrarre immagine da dataset

    Ciao ragazzi..
    Ho un problema: sto lavorando su un DB che viene generato da un'apparecchio medico, trattasi di Sphygmocor.. Vabbè, al di là di questo, il software del macchinario salva i dati in un DB in una versione di access molto vecchia, credo '97.
    Io ho fatto una piccola applicazione che con i Dataset si interfaccia al DB e mi permette di estrarre i dati senza problemi.
    Nel db ci sono anche delle colonne OleDbType.Binary. Non sapendo cosa fosse ho fatto una ricerca su google e risulta che tale tipo di colonna è usata per salvare stream di byte che rappresentano immagini. Ho trovato anche del codice per estrarle..
    codice:
            Dim t As New DS.M_PWAOLEDataTable
            Using ta As New DSTableAdapters.M_PWAOLETableAdapter
                ta.FillByPatNum(t, 1255)
            End Using
            'estraggo i dati con una query
            Dim PictureByteArray(t(0).P_PULSES.LongLength - 1) As Byte
            PictureByteArray = t(0).P_PULSES 'colonna contenente i byte
            Dim BLOBDataStream As New MemoryStream
            BLOBDataStream.Write(PictureByteArray, 0, PictureByteArray.Length)
            pic.Image = New Bitmap(BLOBDataStream)
    Il compilatore si blocca dando errore "Parametro non valido" in corrispondenza dell'ultima riga.
    Direi che forse l'estrazione dei byte non è andata a buon fine.. Ma c'è un modo per essere sicuri che all'interno del campo oledb ci sia un'immagine?
    Ciao grazie

  2. #2
    Un blob binario può essere qualunque cosa... estrai i dati binari in questione da qualche record salvandoli in un file separato ed esamina il file risultante (ad esempio con il classico comando `file` dei sistemi Linux, provando ad aprirlo con un programma che legge le immagini nei formati più disparati come IrfanView, aprendolo con un editor esadecimale cercando "sequenze magiche" caratteristiche di vari tipi di file, ...) per vedere che cosa potrebbe essere.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Ciao
    Intanto grazie per la risposta..
    Per vedere se è un immagine.. dovrei provare a salvare lo stream con un binary stream writer? E poi provare ad aprirl?
    Per aprirlo con un editor di testo normale.. cosa mi consigli? Passare dai byte a Hex e poi? Ci possono essere problemi di codifica?
    Edit..
    ho questo codice:
    codice:
    Dim s As New FileStream("prova.bmp", IO.FileMode.CreateNew)
    s.Write(PictureByteArray, 0, PictureByteArray.Length)
    Salvo un file.. Se lo apro col notepad vedo caratteri e quadratini.. Cioè niente. Mi sa però che è troppo corto come file per essere un'immagine..
    Ultima modifica di renygade; 02-11-2013 a 20:11

  4. #4
    Difficile capirci qualcosa di un file binario aprendolo con il notepad... come già detto, bisogna usare un editor esadecimale (ne esistono diversi free, oltre al fatto che anche Visual Studio, se gli si dice di aprire un file binario, normalmente ti mostra un dump esadecimale). In ogni caso, se carichi il file in questione da qualche parte ci posso dare un'occhiata.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Difficile capirci qualcosa di un file binario aprendolo con il notepad... come già detto, bisogna usare un editor esadecimale (ne esistono diversi free, oltre al fatto che anche Visual Studio, se gli si dice di aprire un file binario, normalmente ti mostra un dump esadecimale). In ogni caso, se carichi il file in questione da qualche parte ci posso dare un'occhiata.
    Ciao. Molto gentile
    Ecco il link al file..
    http://www.freefilehosting.net/prova

    Così come viene salvato byte per byte.. In teoria c'è tutto...

  6. #6
    Come immaginavo dal nome della colonna, non è un'immagine, ma i sample di un elettrocardiogramma o roba del genere; usando gnuplot per plottare i dati che mi hai fornito, si ottiene:


    Il formato dei dati è estremamente semplice: non c'è né intestazione né niente, si tratta semplicemente del dump della rappresentazione in memoria di un array di interi a 16 bit, ciascuno dei quali rappresenta l'ampiezza del segnale ad un determinato tempo (in altri termini, il contenuto del file è una successione di samples, espressi come interi a 16 bit little-endian).
    Ultima modifica di MItaly; 03-11-2013 a 03:10
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Come immaginavo dal nome della colonna, non è un'immagine, ma i sample di un elettrocardiogramma o roba del genere; usando gnuplot per plottare i dati che mi hai fornito, si ottiene:


    Il formato dei dati è estremamente semplice: non c'è né intestazione né niente, si tratta semplicemente del dump della rappresentazione in memoria di un array di interi a 16 bit, ciascuno dei quali rappresenta l'ampiezza del segnale ad un determinato tempo (in altri termini, il contenuto del file è una successione di samples, espressi come interi a 16 bit little-endian).
    GRANDIOSO!!! Grazie Mitaly!
    Io non ci sarei mai arrivato! Giuro.. Si a vederlo così è il tracciato dell'onda spigmica, che il macchinario registra.. A questo punto il passo successivo è.. se io volessi usare tale array di byte per disegnare il grafico in una picturebox? C'è qualche libreria che posso usare per convertire l'array in una png? Chiedo, se non è troppo complicato.. Perché se devo farlo a mano.. mi sa che non mi conviene.
    In ogni caso grazie ancora, sei davvero molto disponibile.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Per la serie provando si impara...
    Ho trafficato un po' e alla fine il grafico me lo sono fatto da me..
    Che te ne pare? Certo.. mancano gli assi e la scala.. Ora mi ci metto..
    Ancora grazie MItaly..
    PS: si accettano consigli..
    PSS: serve che posto le 20 righe di codice che ho scritto?
    grafico.jpg
    PSSS: come si fa a mettere un immagine di dimensioni.. decenti?

  9. #9
    Come hai visto non era un compito così complesso in ogni caso se ti servono funzionalità più avanzate sono sicuro che a cercare su internet ci saranno una miriade di librerie per creare grafici in .NET.

    Sulle immagini, l'unica è hostarle altrove (per quella sopra ad esempio ho usato ImageShack, visto che ho installato il loro client magico su Linux e con due click carico l'immagine direttamente dal gestore file).
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Ciao di nuovo..
    Ehm.. non vorrei andare OT.. Ma sullo stesso progetto ho un altro problemino.. un po' collegato al precedente.
    Nella mia applicazione ho un Dataset con 2 datatable che pescano i dati da un db access. Tutto apposto, nel senso che nelle datatable posso caricare anche le colonne contenenti array di byte, che poi uso per disegnare i grafici..
    Ho scoperto però che se una tabella contiene come colonne array di Byte non posso passarla come source a una datagridview perché mi ha errori nel casting (e ho letto che proprio non si può).
    La mia domanda è questa: quando carico i dati del datatable, col metodo fill, o anche in un altro evento, posso agire sulla table creando una nuova colonna che contiene una parte dei dati espressi nell'array di byte, magari convertiti in string? E poi far sparire quella con i byte in modo da passarla alla datagridview?
    So già che posso farlo una volta che ho in mano la table già caricata.. Ma mi chiedevo se c'è un modo più elegante, mettendo il codice nella classe dataset...
    Ciao

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 © 2025 vBulletin Solutions, Inc. All rights reserved.