Pixel zeichnen mit SDL?



  • Original erstellt von nightmare_frog:
    so viel ich weiss, gibt SDL_MapRGB() einen Uint32-Wert zurück, da seh ich selber nich ganz durch, aber ich glaube, das ist ein Hex-wert, denn SDL_MapRGB rechnet die Farbwerte in einen Hex-Wert um...

    Mal ganz ehrlich : Den absoluten Durchblick durch C bzw C++ hast du noch nicht, oder ? Irgendwo muss diese Funktion doch definiert sein, also sowas wie :
    int SDL_MapRGB (int r, int g, int b)
    Wie sieht das genau aus ?

    bei screen->pixels blick ich noch weniger durch, aber ich diese Syntax zeichnet am oberen linken Fenster-Rand einen Weissen Pixel:
    [code type="C++"]
    *(Uint32 *)g_pSurfScreen->pixels = 0xFFFFFFFF;

    Ist auch logisch, damit weist du den RGB Wert (255,255,255) Weiß an die 0. Stelle im Array.



  • ich dachte mal, ich hätte den Durchblick in C 🙄 , aber da hab ich noch nicht mit dynamischer Speicherverwaltung begonnen...

    du hast doch gefragt, was für einen RÜCKGABEWERT SDL_MapRGB hat und das ist eben Uint32, Uint32 ist sicher irgendwo in den SDL-headerdateien definiert, aber ich habe es noch nirgens gefunden. Und nochmals zu SDL_MapRGB:

    Uint32 SDL_MapRGB(SDL_PixelFormat *fmt, Uint8 r, Uint8 g, Uint8 b);
    

    ich nehme an, das ist das, was du wolltest..

    ja, *(Uint32 *)g_pSurfScreen->pixels zeigt auf die 0.Stelle im Array, aber leider kann ich ja die anderen Stellen nicht ansprechen...

    danke für deine Bemühungen 😃

    gruss

    nightmare_frog

    [ Dieser Beitrag wurde am 06.02.2003 um 18:21 Uhr von nightmare_frog editiert. ]



  • Müsste es nicht

    *(Uint8 *)screen->pixels + y*screen->pitch + x*bpp = color;
    

    heissen? 😕



  • @Saugie: ich habe es schon in beiden schreibweisen angetroffen. Bei mir funktioniert keine von beiden 😃



  • wie wärs denn mit:
    **((Uint32)**screen->pixels + y*screen->pitch + x*bpp) = color;

    (Uint8 *)screen->pixels + y*screen->pitch + x*bpp
    ist der Zeiger auf das Pixel net der Farbwert des Pixels!!!

    [ Dieser Beitrag wurde am 06.02.2003 um 19:18 Uhr von Keks editiert. ]



  • irgendwie leuchtet mir das ein...
    ich werde das morgen mal ausprobieren

    es würde mich nur noch interessieren, was für eine Art Wert die Variable Uint8 hat, ist das eine 8 Bit grosse Integer-Variable und Uint32 eine 32 Bit grosse Integer-Variable?



  • Uint32 ist das selbe wie unsigned int, Uint8 das selbe wie unsigned char usw. Steht alles in der SDL_types.h.



  • danke... 🙂



  • Original erstellt von nightmare_frog:
    dann kommt die Meldung "void value not ignored as it ought to be"...

    Die bekommst Du wenn Du sowas machst:

    void foo() {}
    void bar() {}
    
    int main()
    {
        if (foo()) // foo hat eigentlich den Rückgabetyp void, daher
                   // musst du die Rückgabe von foo ignorieren!
            bar();
        return 0;
    }
    


  • 😃 🙂 😃 es funktioniert...

    ich versteh jetzt auch wieso (Keks hat recht gehabt..).

    Das einzige, was mir noch nicht ganz klar ist (wenn jemand Zeit und Lust hat, dies noch zu beantworten):

    *((Uint32*)screen->pixels + 10*screen->pitch + 10*bpp) = color;
    
    //screen->pixels zeigt hier auf einen Integer-Wert. Das Pixel wird aber nicht an
    //der Position 10 / 10 gezeichnet sondern an der Position 40 / 10 
    //(ist eigentlich logisch: bpp=4, 10*4 = 40)
    
    *((Uint8*)screen->pixels + 10*screen->pitch + 10*bpp) = color;
    
    //screen->pixels zeigt hier auf einen Char-Wert. Das Pixel wird an
    //der Position 10 / 10, falls ich hier das bpp weglasse und x dann einen Wert 
    //hat, der nicht durch 4 teilbar ist, erscheint das Pixel überhaupt nicht
    

    wieso ist das so? Und wieso funktioniert beides, obwohl man ja nicht mit einem Integer-Zeiger auf eine char-Variable zeigen kann?

    gruss

    nightmare_frog

    [ Dieser Beitrag wurde am 07.02.2003 um 09:52 Uhr von nightmare_frog editiert. ]

    [ Dieser Beitrag wurde am 07.02.2003 um 15:46 Uhr von nightmare_frog editiert. ]

    [ Dieser Beitrag wurde am 07.02.2003 um 15:53 Uhr von nightmare_frog editiert. ]


Anmelden zum Antworten