OpenGL Screenshot Pixel invertieren



  • Hi,

    also ich mach mit folgedem Code in einer OpenGL Anwendung einen Screenshot:

    unsigned char *image = NULL;
    glPixelStorei(GL_PACK_ALIGNMENT, 1);
    glReadPixels(x, y, width, height, GL_BGR_EXT, GL_UNSIGNED_BYTE, image);
    

    Dann wird das Feld image in eine tga Datei geschrieben, was auch soweit klappt.
    Das Problem ist nun das meine Anwendung einen schwarzen Hintergrund hat. Der Screenshot soll aber auch ausdruckbar sein.
    Deshalb dachte ich mir, das es doch gehen müsste die Pixelfarben einfach zu invertieren, sodass aus weiß schwarz wird und umgekehrt.
    Nur hab ich nun keine so rechte Ahnung wie ich das anstellen soll,besonders mit den Datentypen unsigned char und GL_UNSIGNED_BYTE.
    Hat jemand einen Tipp?

    Schonmal Danke
    Marl



  • Wenn du die Pixel invertierst, werden auch alle gerenderten nicht Hintergrund-Pixel invertiert. Nicht gut.
    Mach besser ein glClearColor(1.0f,1.0f,1.0f,1.0f);


  • Mod

    for(int a=0;a<width*height*3;a+=3)
    {
        if(image[a]==0 && image[a+1]==0 && image[a+2]==0)
            image[a]=image[a+1]=image[a+2]=0xff;
    }
    

    wobei alle schwarzen pixel weiß werden würden.. kane's lösung wäre wohl besser.

    rapso->greets();



  • Kane schrieb:

    Wenn du die Pixel invertierst, werden auch alle gerenderten nicht Hintergrund-Pixel invertiert. Nicht gut.

    Nein nein, das ist schon ok dass das ganze Bild und nicht nur der Hintergrund invertiert wird.
    Kurz gesagt hab ich ein Programm das einfache Kurven (Bézierkurven, Bézier-Splines usw) visualisiert. Die Kurve ist weiß, der Hintergrund schwarz. Deshalb is es gut zum Drucken einfach alles zu invertieren ... also Kurve schwarz und Hintergrund weiß. Das der Rest (Kontrollpunkte und so) dann eine andere Farbe hat stört mich nich.

    Marl


  • Mod

    for(int a=0;a<width*height*3;a++)
        image[a]=255-image[a]; //gibt bessere möglichkeiten aber diese veranschaulicht das am besten
    

Anmelden zum Antworten