Freigeben über


glReadPixels-Funktion

Die glReadPixels-Funktion liest einen Pixelblock aus dem Framebuffer.

Syntax

void WINAPI glReadPixels(
   GLint   x,
   GLint   y,
   GLsizei width,
   GLsizei height,
   GLenum  format,
   GLenum  type,
   GLvoid  *pixels
);

Parameter

x

Die Fensterkoordinate des ersten Pixels, das aus dem Framebuffer gelesen wird. Gibt zusammen mit der y-Koordinate die Position der unteren linken Ecke eines rechteckigen Pixelblocks an.

y

Die Fenster-y-Koordinaten des ersten Pixels, das aus dem Framebuffer gelesen wird. Gibt zusammen mit der x-Koordinate die Position der unteren linken Ecke eines rechteckigen Pixelblocks an.

width

Die Breite des Pixelrechtecks.

height

Die Höhe des Pixelrechtecks. Die Breiten- und Höhenparameter des Werts "1" entsprechen einem einzelnen Pixel.

format

Das Format der Pixeldaten. Die folgenden symbolischen Werte werden akzeptiert:

Wert Bedeutung
GL_COLOR_INDEX
Farbindizes werden aus dem von glReadBuffer ausgewählten Farbpuffer gelesen. Jeder Index wird je nach Wert und Vorzeichen von GL_INDEX_SHIFT in einen Festen Punkt konvertiert, nach links oder rechts verschoben und GL_INDEX_OFFSET hinzugefügt. Wenn GL_MAP_COLOR GL_TRUE ist, werden Indizes durch ihre Zuordnungen in der Tabelle GL_PIXEL_MAP_I_TO_I ersetzt.
GL_STENCIL_INDEX
Schablonenwerte werden aus dem Schablonenpuffer gelesen. Jeder Index wird je nach Wert und Vorzeichen von GL_INDEX_SHIFT in einen Festen Punkt konvertiert, nach links oder rechts verschoben und GL_INDEX_OFFSET hinzugefügt. Wenn GL_MAP_STENCIL GL_TRUE ist, werden Indizes durch ihre Zuordnungen in der Tabelle GL_PIXEL_MAP_S_TO_S ersetzt.
GL_DEPTH_COMPONENT
Tiefenwerte werden aus dem Tiefenpuffer gelesen. Jede Komponente wird so in Gleitkomma konvertiert, dass der Minimale Tiefenwert 0,0 und der Maximalwert 1,0 zugeordnet wird. Jede Komponente wird dann mit GL_DEPTH_SCALE multipliziert, GL_DEPTH_BIAS hinzugefügt und schließlich an den Bereich [0,1] geklemmt.
GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR_EXT, GL_BGRA_EXT, GL_LUMINANCE, GL_LUMINANCE_ALPHA
Die Verarbeitung unterscheidet sich je nachdem, ob Farbpuffer Farbindizes oder RGBA-Farbkomponenten speichern. Wenn Farbindizes gespeichert werden, werden sie aus dem von glReadBuffer ausgewählten Farbpuffer gelesen. Jeder Index wird je nach Wert und Vorzeichen von GL_INDEX_SHIFT in einen Festen Punkt konvertiert, nach links oder rechts verschoben und GL_INDEX_OFFSET hinzugefügt. Indizes werden dann durch die Rot-, Grün-, Blau- und Alphawerte ersetzt, die durch Indizieren der Tabellen GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G, GL_PIXEL_MAP_I_TO_B und GL_PIXEL_MAP_I_TO_A erhalten werden. Wenn RGBA-Farbkomponenten in den Farbpuffern gespeichert werden, werden sie aus dem von glReadBuffer ausgewählten Farbpuffer gelesen. Jede Farbkomponente wird in Gleitkommapunkt konvertiert, sodass null Intensität 0,0 und volle Intensitätszuordnungen 1,0 zugeordnet werden. Jede Komponente wird dann mit GL_c_SCALE multipliziert und GL_c_BIAS hinzugefügt, wobei c GL_RED, GL_GREEN, GL_BLUE und GL_ALPHA ist. Jede Komponente wird an den Bereich [0,1] geklemmt. Wenn GL_MAP_COLOR schließlich GL_TRUE ist, wird jede Farbkomponente c durch ihre Zuordnung in der Tabelle GL_PIXEL_MAP_c_TO_c ersetzt, wobei c erneut GL_RED, GL_GREEN, GL_BLUE und GL_ALPHA ist. Jede Komponente wird auf die Größe der entsprechenden Tabelle skaliert, bevor die Suche durchgeführt wird. Schließlich werden nicht benötigte Daten verworfen. Beispielsweise verwirft GL_RED die komponenten grün, blau und alpha, während GL_RGB nur die Alphakomponente verwirft. GL_LUMINANCE berechnet einen einzelnen Komponentenwert als Summe der roten, grünen und blauen Komponenten, und GL_LUMINANCE_ALPHA tut dasselbe, während Alpha als zweiter Wert beibehalten wird.

type

Der Datentyp der Pixeldaten. Dabei muss es sich um einen der folgenden Werte handeln.

type Indexmaske Komponentenkonvertierung
GL_UNSIGNED_BYTE 281 (281) C
GL_BYTE 271 [(271)c-1]/2
GL_BITMAP 1 1
GL_UNSIGNED_SHORT 2 61 (2 61) C
GL_SHORT 2 51 [(2 51)c1]/2
GL_UNSIGNED_INT_ 2 1 (2 1) C
GL_INT 2 1 [(2 1)c1]/2
GL_FLOAT Keine c

Pixel

Gibt die Pixeldaten zurück.

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Fehlercodes

Die folgenden Fehlercodes können von der glGetError-Funktion abgerufen werden.

Name Bedeutung
GL_INVALID_ENUM
format oder type war kein akzeptierter Wert.
GL_INVALID_VALUE
Die Breite oder Höhe war negativ.
GL_INVALID_OPERATION
format war GL_COLOR_INDEX, und die Farbpuffer speicherten RGBA- oder BGRA-Farbkomponenten.
GL_INVALID_OPERATION
format war GL_STENCIL_INDEX, und es gab keinen Schablonenpuffer.
GL_INVALID_OPERATION
format war GL_DEPTH_COMPONENT, und es gab keinen Tiefenpuffer.
GL_INVALID_OPERATION
Die Funktion wurde zwischen einem Aufruf von glBegin und dem entsprechenden Aufruf von glEnd aufgerufen.

Bemerkungen

Die glReadPixels-Funktion gibt Pixeldaten aus dem Framebuffer zurück, beginnend mit dem Pixel, dessen untere linke Ecke sich an der Position (x, y) befindet, in den Clientspeicher, beginnend bei Positionspixeln. Mehrere Parameter steuern die Verarbeitung der Pixeldaten, bevor sie in den Clientspeicher eingefügt werden. Diese Parameter werden mit drei Befehlen festgelegt: glPixelStore, glPixelTransfer und glPixelMap. In diesem Thema werden die Auswirkungen der meisten, aber nicht aller parameter beschrieben, die von diesen drei Befehlen angegeben werden, auf glReadPixels .

Die glReadPixels-Funktion gibt Werte aus jedem Pixel mit der unteren linken Ecke (x + i, y + j) für 0 = i <width und 0 = j <height zurück. Bei diesem Pixel handelt es sich um das ithPixel in der j.tenZeile. Pixel werden in der Zeilenreihenfolge von der niedrigsten bis zur höchsten Zeile von links nach rechts in jeder Zeile zurückgegeben.

Die oben beschriebenen Verschiebungs-, Skalierungs-, Verzerrungs- und Nachschlagefaktoren werden alle durch glPixelTransfer angegeben. Der Inhalt der Nachschlagetabelle wird von glPixelMap angegeben.

Der letzte Schritt umfasst die Konvertierung der Indizes oder Komponenten in das richtige Format, wie vom Typ angegeben. Wenn das Format GL_COLOR_INDEX oder GL_STENCIL_INDEX ist und der Typ nicht GL_FLOAT ist, wird jeder Index mit dem in der folgenden Tabelle angegebenen Maskierungswert maskiert. Wenn type GL_FLOAT ist, wird jeder ganzzahlige Index in ein Gleitkommaformat mit einfacher Genauigkeit konvertiert.

Wenn das Format GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR_EXT, GL_BGRA_EXT, GL_LUMINANCE oder GL_LUMINANCE_ALPHA ist und der Typ nicht GL_FLOAT ist, wird jede Komponente mit dem in der vorherigen Tabelle dargestellten Multiplikator multipliziert. Wenn der Typ GL_FLOAT ist, wird jede Komponente unverändert übergeben (oder in das Gleitkommaformat des Clients mit einfacher Genauigkeit konvertiert, wenn es sich von der von OpenGL verwendeten unterscheidet).

Rückgabewerte werden wie folgt im Arbeitsspeicher platziert. Wenn das Format GL_COLOR_INDEX, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA oder GL_LUMINANCE ist, wird ein einzelner Wert zurückgegeben, und die Daten für das i. Pixel in der j. Zeile werden an position (j ) width + i platziert. GL_RGB und GL_BGR_EXT geben drei Werte zurück, GL_RGBA und GL_BGRA_EXT geben vier Werte zurück, und GL_LUMINANCE_ALPHA gibt zwei Werte für jedes Pixel zurück, wobei alle Werte, die einem einzelnen Pixel entsprechen, einen zusammenhängenden Platz in Pixeln einnehmen. Von glPixelStore festgelegte Speicherparameter, z. B. GL_PACK_SWAP_BYTES und GL_PACK_LSB_FIRST, wirken sich auf die Art und Weise aus, wie Daten in den Arbeitsspeicher geschrieben werden. Eine Beschreibung finden Sie unter glPixelStore .

Werte für Pixel, die sich außerhalb des Fensters befinden, das mit dem aktuellen OpenGL-Kontext verbunden ist, sind nicht definiert.

Wenn ein Fehler generiert wird, wird keine Änderung am Inhalt von Pixeln vorgenommen.

Die folgende Funktion ruft Informationen im Zusammenhang mit glReadPixels ab:

glGet mit argument GL_INDEX_MODE

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows 2000 Server [nur Desktop-Apps]
Header
Gl.h
Bibliothek
Opengl32.lib
DLL
Opengl32.dll

Weitere Informationen

glBegin

glCopyPixels

glDrawPixels

glEnd

glPixelMap

glPixelStore

glPixelTransfer

glReadBuffer