FEHLERMELDUNG, Brauche DRINGEND Hilfe.



  • Hatte das noch nie vorher gehört, sowas vergißt man ja nicht. Was ihr da unten so alles habt... 😉



  • drakon schrieb:

    ...
    Hmm, kapiers auch nicht. Nimmt mich jetzt aber Wunder, was du damit gemeint hast.. 🙄

    OK, wenn man's erklärt ist's aber natürlich niemals bmehr lustig:

    [spoiler]
    bezog mich auf den extrem sprechenden Threadtitel, mit dem mal wieder meine Zeit vergeudet wurde
    [/spoiler]
    Gruß,

    Simon2.



  • Ok, das probleem hat sich gelöst, war eine wariabe di nicht korrect war.

    Jetzt mal wass ganz anderes:

    Ich habe einen pointer der zu einer IMAGE führ in "m_ImageBuffer" gespeichert.
    muss jetzt an die IMAGE herrankommen, damit ich diese auswerten kann.
    Wie geht dass denn?

    Ich weiss, sind anfängerfragen aber da ich es nicht weiss und auch nichts finde, hab ich mir gedacht : stell es malhier herein, vieleicht kann dir jemand weiterhelfen.

    Euer Nightlord

    P.S. echt lustig eure kommentare lol



  • Um was geht es da genau? Was ist IMAGE ?

    Bring mal ein bisschen Code..



  • Also habe eine CIS CAMERA von tichawa die an einen framegraber(Modell: Grablink express PCIe) von euresys

    Von Euresys habe ich ebenfals einen Programm der die bilder (IMAGE) ausliest und in den Speicher zwischenspeichert.

    Der Pointer zum bild (IMAGE) ist in m_ImageBuffer gespeichert.

    AUS E-MAIL:
    A pointer to the image data is stored in "m_ImageBuffer". You can use this to copy the image data in your own data structure.

    Ein programm zum ausgeben der werte in eine TXT-datei habe ich aus einem Forum:

    AUS FORUM:

    char buffer1[] = { "\t" };	// buffer for tabulator
     char buffer2[] = { "\n" };	// buffer for next line
     char buffer15[32];	// buffer for information
     char buffer16[8];	         // buffer for elapsed pages
    
    sprintf( buffer16 , "%i" , number );
    
     //sprintf( buffer15 , "%i" , XXXXXXXXXX );
    
     FILE * myfile;
     myfile = fopen( "ValuesFromGrablink.txt" , "a+" );
     fwrite (buffer2 , sizeof(buffer2[0]) , sizeof(buffer2) , myfile );
     fwrite (buffer16 , sizeof(buffer16[0]) , sizeof(buffer16) , myfile );
     fwrite (buffer1 , sizeof(buffer1[0]) , sizeof(buffer1) , myfile );
     fwrite (buffer15 , sizeof(buffer15[0]) , sizeof(buffer15) , myfile );
     fclose(myfile);
    

    ***Das Ziel für diese woche währe das bild (IMAGE) auszulesen und in dieser TXTdatei zu speichern.***[/cpp]
    Wenn ich das Bild (IMAGE) habe muss ich es zu einem
    ACHTUNG KONKURENZ!!!: Java-Programm ACHTUNG KONKURENZ!!! 🙂 😃
    Schicken und dort auswerten un am schirm anzuzeigen.

    WIE GESAGT< WENN ICH ES SCHAFFEN WUERDE DIE (IMAGE) IN DIE TXT-FILE ZU SPEICHERN, WAEHRE DASS SCHON GANZ GUT BIN NAEMLICH UNTER ZEITDRUCK.

    Die werte in m_Image Buffer sind die folgende:

    bei der ersten abfrage kommt der erste wert heraus , bei der zweiten der zweite,und bei der dritten abfrage der dritte:

    63045664
    58064928
    60555296

    dann fangen die werte wieder von vorne.

    Euer Nightlord



  • http://www.tutorials.de/forum/c-c/279494-c-textdatei-schreiben-ohne-inhalt-zu-l-schen.html

    Dies ist der forum aus dem ich dieses TXTdatei schreiben programm herhabe



  • Schon mal was von Code-Tags gehört?

    Sowas hier solltest du auch benutzen:

    void CForum::GetTags(DWORD pTags) {
      if(pTags & GT_CODETAGS) {
        m_pForum->pMembers->SetHappy(TRUE);
      }
    }
    

    EDIT: Editiere deinen Beitrag, so wie ich hier, und umschließe deinen Code mit den entsprechenden Tags (cpp, /cpp).



  • So vieleicht besser? Nur dass hilft mir leider bei meinem Problem nicht weiter.



  • Was ist den das für ein Objekt, auf das du einen Zeiger hast? Da gibt es ja irgendeine Struktur dahinter. Da solltest du mal nach googlen, wenn du das nicht irgendwie in einer Doku mitgeliefert bekommen hast.



  • Dass weiss ich leider nicht,
    Ich weiss nur dass angeblich in m_ImageBuffer eins Pointer ist der aus die anfangsadresse zuweisst an der die Informationen drinstehen an deen en ich drann will.

    Die Kamera besitzt 4096 messpunkte (Pixel) die monochrom jeder 8 bit (1 Byte)farbinformation weiterschickt. somit wahre die information die ich brauche 32768bits gross oder 4096byts gross.

    mehr weiss ich im moment auch nicht.

    Ich musste wohl jede adresse zwischen 58064928 und 60555296 abfragen und der 1byte grosse wert in eine variable speichern und jedeslam nach links verschieben, damit ich alle 4096 bytes erhalte und so die information meines bildes habe.

    es wird doch eine moeglichkeit geben auf diese adresse (z.b. 58064928 )zuzugreifen und die information abzulesen?!?

    Finde leider nichts im netz.

    Bin der meinung : Wenn es moeglich ist einen wert in eine Adresse zu schreiben dann sollte es auch moeglich sein auf diese adresse zurueckzugreifen und abzulesen ohne sie zu loeschen, oder?



  • Bin der meinung : Wenn es moeglich ist einen wert in eine Adresse zu schreiben dann sollte es auch moeglich sein auf diese adresse zurueckzugreifen und abzulesen ohne sie zu loeschen, oder?

    Also wenn du diese Adresse meinst:

    int i = 5;
    std::cout << "var i hat Wert: " << i << " und Adresse: " << &i << std::endl;
    


  • Ja fasst, die adresse muesste ich eigentlich ueber den pointer der in m_ImageBuffer steht haben, nur wie bekomme ich sie,?

    m_ImageBuffer hat den pointer der die adresse des Bildes hat.

    Wie mache ich dass den jetzt damit ich das bild (Code) bekomme , anstadt die drei zahlen:

    63045664
    58064928
    60555296

    Wie fragt man eigentlich einen wert ab der in einer bestimmten adresse gespeichert ist (in meinem Fall die adresse 63045664 (WENN DASS UEBERHAUPT EINE ADDRESSE IST)) ?



  • Der Thread der unverständlichen Sätze. 👍



  • Hier mal ein Beispiel, wie ich auf die Bitmapdaten eines IplImage (OpenCV) zugreife. Keine Ahnung, welchen Image-Typ du da hast, aber das Prinzip wird dasselbe sein. Vielleicht hilft es dir:

    //-------------------------------------------------------------------------------------------------------------------------
    // Gibt die Farbwerte eines Pixels eines IplImages in der Struktur PixelColorRGB zurück.
    //-------------------------------------------------------------------------------------------------------------------------
    void CDlgDOF::GetPixelColor(IplImage *iplBmp,PixelColorRGB *pcRet,uint row,uint col) {
      //-------------------------------------------------------------------------------------------------------------------------
      ImageStart(iplBmp);
      UINT* pixels = (UINT*)iplBmp->imageData;//(UINT*)bmpData.Scan0;
      //
      pcRet->a=(pixels[row*iplBmp->widthStep/4+col]&0xff000000)>>24; //Alpha
      pcRet->r=(pixels[row*iplBmp->widthStep/4+col]&0x00ff0000)>>16; //Rot
      pcRet->g=(pixels[row*iplBmp->widthStep/4+col]&0x0000ff00)>>8;  //Grün
      pcRet->b=(pixels[row*iplBmp->widthStep/4+col]&0x000000ff);     //Blau
      ImageEnd(iplBmp);
    }
    

    Wenn du den ARGB Farbraum verwendest (32 Bit), bekommt jeder Kanal 8 Bit zugeteilt. Die 4 Kanäle eines Pixels werden zusammen in einer 32 Bit Variable gespeichert. Du musst sie also erst mit bitweisem OR und Bitshifts auseinander friemeln, wie im Beispiel.

    EDIT: Mein IplBmp->imageData dürfte deinem m_ImageBuffer entsprechen.



  • Cool, dass probiere ich mal aus, DANKE!!

    Mein bild is monochrom ind jeder messpunkt gibt mir eine 8bit information.
    Kann ich diese RGB-zeilen in meinem fall dann nicht weglassen?
    da muesste ich eigentlich jedes byte (8bits) einzeln analysiren und dann jenachdem wie hoch der wert ist (Schwarz) es ist ermessen ob ich es annehme oder nicht.



  • pcRet->a=(pixels[row*iplBmp->widthStep/4+col]&0x00ff0000)>>24; //Alpha
    

    Müsste es da nicht 0xff000000 heißen?



  • Fellhuhn schrieb:

    pcRet->a=(pixels[row*iplBmp->widthStep/4+col]&0x00ff0000)>>24; //Alpha
    

    Müsste es da nicht 0xff000000 heißen?

    Du hast natürlich Recht. Ich benötige den Alpha-Kanal in diesem Programm nicht und habe die Zeile nur der Vollständigkeit halber ergänzt. Mein Fehler...



  • Nightlord schrieb:

    Cool, dass probiere ich mal aus, DANKE!!

    Mein bild is monochrom ind jeder messpunkt gibt mir eine 8bit information.
    Kann ich diese RGB-zeilen in meinem fall dann nicht weglassen?
    da muesste ich eigentlich jedes byte (8bits) einzeln analysiren und dann jenachdem wie hoch der wert ist (Schwarz) es ist ermessen ob ich es annehme oder nicht.

    Ja, in dem Fall dürftest du ganz einfach byteweise vorgehen können (hatte ich übersehen). Bei 8 Bit müssten das ja dann 256 Graustufen sein. Was meinst du denn mit annehmen oder nicht annehmen?



  • Na ich muss sehen ob der wert z.b. grosser oder kleiner ist als 20.
    Bei kleine ist kein material vorhanden,
    bei groesser als 20 dann ist material vorhanden.
    Das habe ich gemeint, sorry.

    hab mir das so Ueberlegt:

    int bitCode = 0; //byte aus der adresse der ein messpunkt der kamera darstellt (1 pixel des Bildes)

    int breite = 0; //wert zur berechnung der Breite des materials. Jeder bit entsprechen 0.127mm am material

    int bildByte = 0; // graustufe des pixels (Messpunktes)

    while( adresse < adresse+4096){ // adresse 58064928, bildbreite 4096, damit alle adressen und damit das ganze bild gepruefft wird

    copyvalue (VonAdresse, nach bildByte); der befehl zum kopieren kenne ich nicht !!! Wahre fein wenn mir jemad da helfen koennte.

    SchiebeNachLinks (bildCode, Um_1_Byte); // kenne den befehl der dass bewirkt auch nicht. Wenn bildCode z.b. ... 000 000 000 125 250 250 250 ist,soll daraus ... 000 000 125 250 250 250 000 werden also, um ein byte verschieben und mit 0nachfullen.

    bildCode = bildCode + bildByte; // dass muesste so gehen. damit wenn z.b. bildCode ... 000 000 125 250 250 250 000 und bildByte 148 ist, dann ist der neue bildCode = ... 000 000 125 250 250 250 148

    adresse = adresse + 1; // damit naechste adresse genommen wird.

    If (bildByte >= 20){ // wenn groesser als 20 dan habe ich material. wenn kleiner dann ist kein material da.

    breite = breite + 1; // damit ich breite des materials berechnen kann.

    }

    }

    Kenne einige befehle nicht desswegen kann dass nicht so funktionieren aber mit den richtigen befehlen muesste es gehen, oder ???
    Wenn jemand die befehle kennt, dann bitte melden, ok? Danke.

    p.s. dass mit dem "SchiebeNachLinks" funktioniert so:
    Wenn der Code 123456 ist und nach Links verschiebt wird , wird daraus 1234560 (also mit dem wert 10 multipliziert)wird dann der byte des pixels Hier imbeispiel "9" dazuaddiert, sollte daraus 1234569 werden.So habe ich am ende ein Code Der das ganze Bild wiederspiegelt (Hoffe ich zumindest).

    Euer Nightlord



  • Oh, ich hatte dir eigentlich am Freitag noch etwas gepostet, zumindest wollte ich das (da scheine ich wohl in der Eile das Abschicken vergessen zu haben...).

    Na ja...

    Hast du denn einfach mal etwas ganz Simples wie z.B. das hier versucht?

    UINT iCount20=0;
      for(int i=0;i<iBytes;i++) { //iBytes soll die Anzahl der Bytes deines Bildes beinhalten.
                                  //(die wahrscheinlich in der Klasse zu finden ist, der auch
                                  //m_ImagePointer angehört)
        if(m_ImagePointer[i]>20) {
          //mache irgendwas, z.B. Pixel mit Wert über 20 zählen:
          iCount20++;
        }
      }
    

    Wenn hier was Ordentliches 'rauskommt, hast du schonmal einen Anfang. Dann kannst du dir überlegen, wie du das Bild weiter verarbeiten willst.


Anmelden zum Antworten