Aus Datei lesen



  • i und x sind int.



  • Lass dir mal in Zeile 55 den Wert von i und von lSize ausgeben. Den Zusammenhang zwischen beiden kennst du ja (Hausnummern)

    Welchen Wert hat i, wenn die Suchwerte nicht gefunden werden?
    Zu Zeile 58 bis 74 habe ich schon etwas geschrieben.

    Was soll Zeile 78 bis 84.
    Du hast die Datei komplett in Zeile 41 eingelesen. Danach kann nur EOF kommen.
    Außerdem musst du output auch wieder schließen.

    Du must eigentlich nur buffer in output schreiben. (Was ist das Gegenteil von fread?)

    Und nochmal:

    Zermyy schrieb:

    Die Skala der möglichen Daten in der Datei beträgt also
    0 bis 4095. Diese Werte sind nicht direkt die CT-Werte: CT-Werte reichen von -
    1024 HU bis +3071 HU, von den Werten in der Datei müssen also 1024 abgezogen
    werden, um die tatsächlichen CT-Werte zu erhalten.

    Wenn bei dir jetzt -1024 in den Daten steht, musst du das irgendwie wieder rückgangig machen.
    Du musst dir etwas für die Zeile bild[i] = pixel; überlegen, wie du wieder auf 0 bis 4095 kommst.

    Ich war noch am schreiben, darum kannte ich dein Post von 19:16 vorhin noch nicht. :p



  • Vielen Dank nochmal für deine Hilfe!

    Ich hab nun irgendwie keinen klaren Kopf mehr, bin seit heute morgen dabei.

    Ich werde morgen weiter machen vll magste dir das nochmal angucken. Ich mache jetzt irgendein Fehler, da das ausgegebene bild nun 0 kb groß ist und das ganze CMD abstützt xD

    Ich denke mal ich schreibe über das Array hinaus.

    Ich gucke nachher nochmal rein muss aber mal kurz ne Pause machen.

    lg

    Zermy



  • Zermy schrieb:

    short pixel;
    
    	pixel = bild[i] - 1024;
    
    	if( pixel<'-900'|| pixel>'250')  /* <-- was soll das denn machen? */
    


  • Hey,

    ich kanns net lassen ich will die Aufgabe lösen.

    lSize=659706
    i=67698

    Zeile 78-84 will ich die Datei mit einem anderen Namen speichern.

    fclose hab ich nun gesetzt.

    muss ich nicht das -1024 einfach rückgänig machen in dem ich dann wieder +1024 rechne?

    Nur wie das alles aussehen soll weiß ich nicht... ich komm gar nicht so schnell im Lesen hinterher wie ich das hier brauchen tu.

    Nur der Zeitdruck im Nacken ist doof...

    lg Zermy



  • @ wutz,

    das soll mir die Pixel filtern, die die nicht in das Bild rein sollen.



  • Tja, so funktioniert das aber nicht. Short-Werte kann man nicht mit Multichar-Literalen vergleichen.



  • Zermyy schrieb:

    lSize=659706
    i=67698

    sieht doch gut aus.

    Zermyy schrieb:

    Zeile 78-84 will ich die Datei mit einem anderen Namen speichern.

    Dazu habe ich schon etwas geschrieben.

    Zermyy schrieb:

    muss ich nicht das -1024 einfach rückgänig machen in dem ich dann wieder +1024 rechne?

    hört sich gut an.

    Zermyy schrieb:

    das soll mir die Pixel filtern, die die nicht in das Bild rein sollen.

    Wutz wollte wissen warum da die ' stehen. Weißt du was die bedeuten?



  • Hey,

    Also der Unterschied ist mir Grade nicht klar! Ich gucke aber morgen nochmal und danke euch für die hilfe und das aufmerksam machen für die Fehler! Die Datei kann ich also nicht einlesen da schon eof erreicht ist !? Ich guck mir die Schleife nochmal an und wuerde mich über eure Hilfe freuen!

    Danke nochmal und frohe Ostern

    Lg zermy



  • Germany schrieb:

    Die Datei kann ich also nicht einlesen da schon eof erreicht ist !?

    Nochmal: Du hast die Datei schon eingelesen.
    Was meinst du, was das fread macht?



  • Entschuldigt die Autokorrektur macht aus Zermy Germany...

    Ja mit fread hab ich die Bilddatei in den Speicher gelesen bis zum Ende.
    Somit muss ich diese doch vom Ende an wieder zurück lesen können wenn alles soweit geändert ist oder ich setze den Zeiger an den Anfang und speichere diese so.

    In meiner Abfrage bin ich ja die ganze Zeit am Ende der Datei 🙂

    Die '' machen doch ein ASCI Zeichen daraus, wenn ich das richtig probiert habe.

    ich setzt mich morgen nochmal dran und versuche diese Schritte dann in Code zu bringen und poste den dann hier!

    Ich wünsche schonmal ein schönen Sonntag 🙂

    lg Zermy

    Ich brauche noch viel mehr gute Bücher für C! 😡 😃



  • Zermyy schrieb:

    Ich brauche noch viel mehr gute Bücher für C! 😡 😃

    Es gibt nicht viele gute Bücher zu C.

    if( pixel<'-900'|| pixel>'250')
     {
         pixel=-1024;
    
     }
    

    muss natürlich heißen:

    if( pixel<-900|| pixel>250 )
     {
         pixel=-1024;
    
     }
    

    schließlich rechnest du selbst auch nicht mit ASCII Zeichen

    pixel='-1024';
    


  • ja xD danke^^

    Erst nochmal frohe Ostern.

    Ich setzt mich nun mal ran und bring das alles in C-Code!

    Habt ihr evtl. gute Vorschläge für GUTE Bücher?

    C von A bis Z ist ganz nett hat aber nur die einfachen Beispiele, werde das aber trotzdem weiter lesen.

    lg Zermy



  • Hey,

    ich hab einmal meine Deklaration gepostet und den wichtigen Teil.
    Das Gegenteil von fread ist natürlich fwrite xD.

    int main () {
      FILE * pFile;
      long lSize,x;
      char * buffer;
      size_t result;
      int n=0,y,z,v=0,i;
      short c;
      short suchwerte[2] = {0x7FE0,0x0010};
      short *bild;
      FILE *output;
      int *b;
          int ch;
    
     bild = (short *)buffer; 
      for(i=0; i < (lSize / sizeof(short)-1); i++)
      if ((bild[i] == suchwerte[0]) && (bild[i+1] == suchwerte[1])  ) break;
    
      i+=(4/sizeof(short));
    
      printf("%d\n",i);
      printf("%d",lSize);
    
    for(x=0;x<512*512;x++)// Hier rennt x durch das bild als zähl variable
    {
    	short pixel;
    
    	pixel = bild[x] - 1024; 
    
    	if( pixel<-900|| pixel>250)// dann wird hier geguckt ob  das Pixel raus muss, wenn ja wird in bild das Pixel gespeichert undzwar so das die informationen stimmen also +1024 da ich vorher ja -1024 gerechnet hab xD
     {
    
    	 bild[x] = pixel+1024;// pixel ist dann 0
     }
    
    	bild[x] = pixel+1024;// wenn das nicht in die if anweisung geht dann wird das pixel einfach so gespeichert ohne veränderung
    
    } 
    
    fwrite (buffer , 1 , sizeof(buffer) , output);
    
    //bei fwirte ist mir noch nicht ganz klar was die 1 bedeutet size_t size soll da rein, size_t ist soweit ich das verstanden habe doch eine funktion die mir die größe anzeigt. aber die größe ist doch schort oder irre ich mich da
    

    Das Bild ist nun auch wieder größer, nur öffnen kann ichs nicht xD
    Es kommt aber kein Fehler mehr.

    lg Zermy



  • Zermy schrieb:

    Habt ihr evtl. gute Vorschläge für GUTE Bücher?

    http://www.c-plusplus.net/forum/p2195649#2195649

    Zermy schrieb:

    C von A bis Z ist ganz nett hat aber nur die einfachen Beispiele, werde das aber trotzdem weiter lesen.

    Damit schadest du dir, weil vieles/die überwiegende Mehrzahl der 'Erklärungen' und der Beispielcodes falsch sind. Du wirst mit dem dort vermitteltem Pfusch-Wissen später viel Ärger haben und mühsam vieles nochmal neu (richtig) lernen müssen.
    http://www.c-plusplus.net/forum/272350-full



  • Zermy schrieb:

    bild[x] = pixel+1024;// pixel ist dann 0
    

    Nein. Überleg mal was rauskommt, wenn pixel z.B 1000 ist

    Zermy schrieb:

    fwrite (buffer , 1 , sizeof(buffer) , output);
    

    Sind die gleichen Parameter wie bei fread.
    sizeof(buffer) gibt die die Größe der Zeigervariablen an ist z.Zt. meist 4 oder 8.

    Die 1 gibt die Elemntgröße an.
    Wenn du z.B 500 int lesen willst schreibst du

    fread(buffer,sizeof(int),500,file);
    

    Aber: DU kennst deine Filegröße in Byte bereits.



  • Hey,

    stimmt das war ne gute Erklärung.Danke!

    Das mit dem pixel hab ich nicht richtig überlegt.
    pixel = bild[i] + 1024; müsste das dann einfach sein denn damit mache ich doch pixel = bild[i] - 1024; rückgänig...

    lSize ist meine größe vom file
    fwrite (buffer , 1 , lSize , output);

    ich kann nun das bild auch wieder öffnen nur an der Filterung muss ich noch arbeiten 🙂



  • Schau doch mal am Kommentar hinter der Zuweisung, welche Zeile ich genommen habe:

    bild[x] = pixel+1024;// pixel ist dann 0
    

    Tipp: Das ist nicht die Zeile zum Rückgängig machen.



  • Arg ok, Denkfehler...



  • Du willst doch die Punkte <-900 und > 250 löschen.
    Bis jetzt hast du immer pixel = 0 geschrieben

    Rechne doch mal per Hand durch
    Fang in Zeile 29 an für
    a: bild[i] = 0
    b: bild[i] = 1024
    c: bild[i] = 2000

    Was steht dann jeweils in Zeile 39 in bild[i] und pixel ? Passt das zu deinen Vorgaben?


Anmelden zum Antworten