Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    ....ti spiego l'idea base...un dicom è lo standard che viene utilizzato per visualizzare e lavorare con immagini mediche (radiografie tac etc...)...un file dicom è un file che contiene l'immagine in un formato tra jpeg o altri e in più ci sono dei tag che descrivono attributi riguardanti il paziente, la visita a cui si riferisce l'immagine etcc...
    io sono nella fase di lettura di questi elementi e oltre a leggerli voglio visualizzarli in un elenco....
    ...ogni elemento (data elemnt) ha un campo così composto:
    campo tag;
    campo vr;
    campo lunghezza campi dati;
    dato.
    ...ho già creato tutte le procedure e le funzioni per la lettura di questi campi....che sono variabili secondo determinate regole etc...
    l'idea che ho avuto è:
    ..devo creare un oggetto filedicom che abbia come attributi questi elementi...quindi mi sono creato un tipo record che contenesse queste quattro info, in modo che un record descrivesse un elemento e poi ho creato un array di questi record, il quale descrive tutto il dataset elements che caratterizza il mio file dicom...quindi ho messo questo array come attributo dell'oggetto....
    quando da classi esterne istanzio il mio oggetto, lancio il costruttore che creadirettamente questo array....
    re dei giovani

  2. #12
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,482
    La creazione di una classe che rappresenta un singolo file è corretta, da un punto di vista concettuale.

    Siccome suppongo che il numero di blocchi di dati all'interno del file non possa essere determinato per principio, al posto di un array farei uso di una lista dinamica di oggetti (TList o TObjectList), creando un'istanza di tale lista all'interno dell'oggetto che rappresenta il file intero.

    Predisporrei poi una classe che rappresenti il blocco di dati, creandone un'istanza per ciascun blocco incontrato in fase di lettura il cui riferimento si può aggiungere alla lista descritta in precedenza, disponendo quindi di una struttura che riserva automaticamente in memoria i "posti" necessari per gli oggetti da memorizzare.

    Per leggere il file, userei uno "stream" appropriato al posto delle classiche funzioni Pascal, a meno che il file non possa risultare enorme (nell'ordine di parecchi MB), adottando ad esempio un TFileStream o un TMemoryStream ed estraendo, con gli appositi metodi di "read" e "write", le informazioni dallo stream e copiandole nei campi dell'oggetto che rappresenta un singolo blocco di dati.

    Un'eventuale visualizzazione dei dati a video la manterrei slegata dal codice che si occupa del caricamento, per non dare luogo ad un incomprensibile "spaghetti code" che fa tutto nello stesso punto, rendendo impossibile capire quale stato dell'operazione (caricamento, conversione, memorizzazione, visualizzazione, ecc.) fallisce.

    Detto questo, una volta steso il codice necessario, verificando i punti in cui si verificano eventuali errori, è possibile procedere a diagnosticare ciò che non va.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #13
    ...ciao....Alka....ho ascoltato il tuo consiglio e ho riguardato le mie classi...
    ho quindi creato tre classi per leggere il dataset:

    1) classe Tdataelement che gestisce istanza del singolo data element;
    2) classe Tdataset che ha come attributo un oggetto List che conterrà tutti gli ogeetti di tipo Tdataelement.
    3) unit di servizio con metodi per lettura dei vari campi del data element

    ...ho però un problema...segui questo schema logico:

    imposto variabile per uscire dal ciclo di creazione del dataset;

    verifica condizione....(mettiamo sia vera...dovrei in teoria continuare a creare dtataelement, e metterli in lista)

    data:= Tdataelement.create; // istanzio oggetto

    pdata:@data;// creo suo puntatore


    // fase lettura da file e settaggio attributi di data va a buon fine

    ...a questo punto...aggiungo data nella List chiamata lista:

    lista.Add(data);

    ...e ricomincia il ciclo...

    però c'è un problema: il passo succssivo sovrascriverà l'oggetto nella lista...perchè usa sempre data con lo stesso indirizzo...come faccio? devo modifiargli solo il puntatore o dovrei allocare un nuovo spazio di memoria per l'elemento data in ogni ripetizione? Se la risposta è la seconda che funzione devo utilizzare per allocare la memoria per ogni elemento?
    re dei giovani

  4. #14
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,482
    Temo ci sia un po' di confusione... :master:

    Non c'è alcun puntatore da usare in questo caso, almeno in modo esplicito.
    Perché devi creare un puntatore?

    E' sufficiente scrivere

    codice:
      MyDataElement := TDataElement.Create;
      MyList.Add(MyDataElement);
    Si crea l'oggetto e il riferimento ottenuto lo si aggiunge alla lista, non serve nient'altro.

    Comunque studierei in modo approfondito la programmazione ad oggetti prima di addentrarmi in un progetto del genere, per conoscere il modo corretto per creare oggetti, distruggerli all'occorrenza, aggiungerli a liste ed altre strutture, passare riferimenti a tali oggetti e così via.

    Altrimenti - fidati - avrai solamente problemi.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #15
    .....è vero ho un po di confusione.....mi piacerebbe imparare "linearmente"...il problema è il tempo.....ho accettato di sviluppare questo progetto di studio per la tesi triennale perchè penso di poter accrescere la mia esperienza nel mondo informatico e sopratutto nel campo dell'eleaborazione di immagini mediche... per un eventuale futuro sbocco lavorativo in questo campo...pur non essendo un informatico "puro"...ho accettato come sfida a me stesso...anche per dimostrarmi che sono capace di portare ha termine progetto di un certo peso....ho quindi recuperato manuali, tutorials, ho fatto esercitazioni.....ma mi manca quel qualcosa ...però non posso mollare ed è per questo che, passami l'espressione, sfrutto esperienza di chi ne sa più di me...e meno male che ci siete......
    ....cmq finita questa patetica spiegazione....posso dirti che io usavo puntatori al'oggeto in quanto in ogni documento tecnico che ho trovato, le Tlist sono definite come array di puntatori e negli esempi che mi venivano forniti da questi documenti, ogni elemento di una Tlist veniva aggiunto tramite il suo puntatore....ad esempio, nell'esempio veniva creato un record ed era questo record che veniva aggiunto alla lista tramite il suo puntatore....ciao
    re dei giovani

  6. #16
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,482
    Originariamente inviato da re dei giovani
    .....è vero ho un po di confusione.....mi piacerebbe imparare "linearmente"...il problema è il tempo..... [...]
    Capisco la problematica del tempo, ma è come voler effettuare un'operazione chirurgica chiedendo, di volta in volta, dove bisogna tagliare, come bisogna disporsi, ...

    Nessuno mette in dubbio le capacità, questo è ovvio, il problema è che se non hai il tempo di documentarti, non puoi nemmeno avanzare la pretesa di riuscire ad utilizzare strumenti di cui non ti sei documentato.

    Tra l'altro, sono fermamente convinto che leggendo e documentandosi si impieghi molto meno tempo a realizzare un progetto; chiedere aiuto sul forum e attendere le risposte per i minimi intoppi non mi pare un metodo così rapido.

    Originariamente inviato da re dei giovani
    ....cmq finita questa patetica spiegazione....posso dirti che io usavo puntatori al'oggeto in quanto in ogni documento tecnico che ho trovato, le Tlist sono definite come array di puntatori e negli esempi che mi venivano forniti da questi documenti, ogni elemento di una Tlist veniva aggiunto tramite il suo puntatore....ad esempio, nell'esempio veniva creato un record ed era questo record che veniva aggiunto alla lista tramite il suo puntatore....ciao
    Qualsiasi riferimento ad un oggetto è intrinsecamente un puntatore.

    codice:
    var
      MyObject: TMyObject;
    
    MyObject := TMyObject.Create;
    MyObject è a tutti gli effetti un puntatore all'istanza di TMyObject.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #17
    .....ciao .....tutto quello che hai detto è vero e rientra, diciamo, nella mia filosofia usuale di affrontare nuovi argomenti;...consigli su buona documentazione che posso studarmi? cioè col senno di poi, di chi ne sa anche perchè probabilmente questo passaggio di documentazione l'ha fatto prima di me ...se dovessi scegliere dei link o dei testi da consigliare a un neofita del delphi cosa consiglieresti?....ciao e buone ferie (almeno, le mie sono appena cominciate)
    re dei giovani

  8. #18
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,482
    Originariamente inviato da re dei giovani
    .....ciao .....tutto quello che hai detto è vero e rientra, diciamo, nella mia filosofia usuale di affrontare nuovi argomenti;...consigli su buona documentazione che posso studarmi? cioè col senno di poi, di chi ne sa anche perchè probabilmente questo passaggio di documentazione l'ha fatto prima di me ...se dovessi scegliere dei link o dei testi da consigliare a un neofita del delphi cosa consiglieresti?....
    Siamo un po' OT in questa discussione. Leggi le discussioni in rilievo: ce n'è una che tratta sostanzialmente questo argomento. Prova a vedere se contiene link e risorse interessanti. In caso contrario, puoi pure continuarla se sono necessarie ulteriori informazioni.

    Originariamente inviato da re dei giovani
    ciao e buone ferie (almeno, le mie sono appena cominciate)
    Le mie non sono ancora cominciate, e saranno molto brevi.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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