Zeiger vom 2D Array



  • Ich habe einen Zeiger von einem Array. Dieser Array hat 2 Dimensionen.

    char* imageData;

    ich habe versucht die Daten wie gewohnt abzufragen, aber der Compiler zeigt mir einen Fehler an:

    imageData[i][j];

    Wäre das ein Erzatz??:

    imageData[i*j];



  • hmmmmmmm...
    so vielleicht?

    **imageData
    

    😕



  • Ne, "imageData[i*j];" funktioniert schon. ich wollte nur wissen, ob ich mit dieser Variante auf das selbe Element zugreifen würde, als wenn ich "imageData[i][j]" aufrufen würde.



  • unsigned Memory[64][64],
             *Array;
    Array = (unsigned *)&Memory;
    
    *(Array + (16 * 64 + 32)) = 1;
    ..
    *(Array + (16 * 64 + 32)) == *(Memory[16] + 32) == Memory[16][32];
    

    ➡

    Da der gesammte Array linear im Speicher liegt, kommen **-Zeiger nicht in Frage, da diese etwas völlig anderes darstellen. Um den Speicher auslesen zu können, musst du die letzte Dimension kennen. Die Daten an Position (X, Y) befinden sich also bei

    *(Zeiger + X * Dimension + Y)
    

    :p



  • if((unsigned char)*(tmp->imageData+(ii*tmp->width+jj)) > 128) 
          pixel_count++;
    

    ist das so richtig??

    Die ImageData soll im ganz normalen Windows Bitmap Format vorliegen. (Punkt (0, 0) ist unten links in der Ecke...)(Ich benutze IPL)

    ii ist hierbei die x Koordianate
    jj ist dabei die y Koordinate

    ich will die Anzahl der Pixel mit einem Wert über 128 in einem bestimmten Bereich zählen. Das Bild ist ein Grayscal Image, hat also nur einen Farbkanal.

    [edit]

    es hätte doch

    if((unsigned char)*(tmp->imageData+(jj*tmp->width+ii)) > 128) 
          pixel_count++;
    

    heißen sollen [/edit]



  • haksor schrieb:

    unsigned Memory[64][64],
             *Array;
    Array = (unsigned *)&Memory;
    
    *(Array + (16 * 64 + 32)) = 1;
    ..
    *(Array + (16 * 64 + 32)) == *(Memory[16] + 32) == Memory[16][32];
    

    ➡

    Da der gesammte Array linear im Speicher liegt, kommen **-Zeiger nicht in Frage, da diese etwas völlig anderes darstellen. Um den Speicher auslesen zu können, musst du die letzte Dimension kennen. Die Daten an Position (X, Y) befinden sich also bei

    *(Zeiger + X * Dimension + Y)
    

    :p

    tja, ich wusste doch, dass mein vorschlag falsch ist...
    (noch kein meister ist vom himmel gefallen 😃 )



  • gelöscht... noch zu früh für mich...


Anmelden zum Antworten