funzione glReadPixels
La funzione glReadPixels legge un blocco di pixel dal framebuffer.
Sintassi
void WINAPI glReadPixels(
GLint x,
GLint y,
GLsizei width,
GLsizei height,
GLenum format,
GLenum type,
GLvoid *pixels
);
Parametri
-
x
-
Coordinata x della finestra del primo pixel letto dal framebuffer. Insieme alla coordinata y , specifica la posizione dell'angolo inferiore sinistro di un blocco rettangolare di pixel.
-
y
-
Coordinate della finestra y del primo pixel letto dal framebuffer. Insieme alla coordinata x , specifica la posizione dell'angolo inferiore sinistro di un blocco rettangolare di pixel.
-
width
-
Larghezza del rettangolo pixel.
-
height
-
Altezza del rettangolo pixel. I parametri width e height del valore "1" corrispondono a un singolo pixel.
-
format
-
Formato dei dati pixel. Vengono accettati i valori simbolici seguenti:
Valore Significato - GL_COLOR_INDEX
Gli indici colore vengono letti dal buffer di colori selezionato da glReadBuffer. Ogni indice viene convertito in punto fisso, spostato a sinistra o a destra, a seconda del valore e del segno di GL_INDEX_SHIFT e aggiunto a GL_INDEX_OFFSET. Se GL_MAP_COLOR è GL_TRUE, gli indici vengono sostituiti dai mapping nella tabella GL_PIXEL_MAP_I_TO_I. - GL_STENCIL_INDEX
I valori degli stencil vengono letti dal buffer degli stencil. Ogni indice viene convertito in punto fisso, spostato a sinistra o a destra, a seconda del valore e del segno di GL_INDEX_SHIFT e aggiunto a GL_INDEX_OFFSET. Se GL_MAP_STENCIL è GL_TRUE, gli indici vengono sostituiti dai mapping nella tabella GL_PIXEL_MAP_S_TO_S. - GL_DEPTH_COMPONENT
I valori di profondità vengono letti dal buffer di profondità. Ogni componente viene convertito in virgola mobile in modo che il valore minimo di profondità sia mappato a 0,0 e il valore massimo sia mappato a 1,0. Ogni componente viene quindi moltiplicato per GL_DEPTH_SCALE, aggiunto a GL_DEPTH_BIAS e infine bloccato all'intervallo [0,1]. - GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR_EXT, GL_BGRA_EXT, GL_LUMINANCE, GL_LUMINANCE_ALPHA
L'elaborazione varia a seconda che i buffer colori archiviino indici di colore o componenti di colore RGBA. Se gli indici di colore vengono archiviati, vengono letti dal buffer dei colori selezionato da glReadBuffer. Ogni indice viene convertito in punto fisso, spostato a sinistra o a destra, a seconda del valore e del segno di GL_INDEX_SHIFT e aggiunto a GL_INDEX_OFFSET. Gli indici vengono quindi sostituiti dai valori rosso, verde, blu e alfa ottenuti indicizzando le tabelle GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G, GL_PIXEL_MAP_I_TO_B e GL_PIXEL_MAP_I_TO_A. Se i componenti di colore RGBA vengono archiviati nei buffer di colori, vengono letti dal buffer dei colori selezionato da glReadBuffer. Ogni componente di colore viene convertito in virgola mobile in modo che l'intensità zero venga mappata a 0,0 e l'intensità completa sia mappata a 1,0. Ogni componente viene quindi moltiplicato per GL_c_SCALE e aggiunto a GL_c_BIAS, dove c è GL_RED, GL_GREEN, GL_BLUE e GL_ALPHA. Ogni componente è bloccato all'intervallo [0,1]. Infine, se GL_MAP_COLOR è GL_TRUE, ogni componente colore c viene sostituito dal mapping nella tabella GL_PIXEL_MAP_c_TO_c, dove c viene nuovamente GL_RED, GL_GREEN, GL_BLUE e GL_ALPHA. Ogni componente viene ridimensionato in base alle dimensioni della tabella corrispondente prima dell'esecuzione della ricerca. Infine, i dati non necessario vengono eliminati. Ad esempio, GL_RED rimuove i componenti verdi, blu e alfa, mentre GL_RGB rimuove solo il componente alfa. GL_LUMINANCE calcola un singolo valore del componente come somma dei componenti rosso, verde e blu e GL_LUMINANCE_ALPHA esegue la stessa operazione, mantenendo alfa come secondo valore. -
type
-
Tipo di dati dei dati pixel. Deve essere uno dei valori seguenti.
Tipo Maschera di indice Conversione dei componenti 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 Nessuno c -
Pixel
-
Restituisce i dati pixel.
Valore restituito
Questa funzione non restituisce un valore.
Codici di errore
I codici di errore seguenti possono essere recuperati dalla funzione glGetError .
Nome | Significato |
---|---|
|
il formato o il tipo non è un valore accettato. |
|
Larghezza o altezza è negativa. |
|
il formato è stato GL_COLOR_INDEX e i buffer di colore archiviati i componenti di colore RGBA o BGRA. |
|
il formato era GL_STENCIL_INDEX e non c'era alcun buffer stencil. |
|
il formato è stato GL_DEPTH_COMPONENT e non era presente alcun buffer di profondità. |
|
La funzione è stata chiamata tra una chiamata a glBegin e la chiamata corrispondente a glEnd. |
Commenti
La funzione glReadPixels restituisce dati pixel dal framebuffer, a partire dal pixel l'angolo inferiore sinistro è in posizione (x, y), nella memoria client a partire dai pixel di posizione. Diversi parametri controllano l'elaborazione dei dati pixel prima che venga inserita nella memoria client. Questi parametri sono impostati con tre comandi: glPixelStore, glPixelTransfer e glPixelMap. Questo argomento descrive gli effetti su glReadPixels della maggior parte, ma non tutti i parametri specificati da questi tre comandi.
La funzione glReadPixels restituisce valori da ogni pixel con angolo inferiore sinistro in corrispondenza (x + i, y + j) per 0 = i <width e 0 = j <height. Questo pixel viene detto essere il thpixel nella riga jth. I pixel vengono restituiti in ordine di riga dal più basso alla riga più alta, a sinistra a destra in ogni riga.
I fattori di shift, scale, bias e ricerca descritti in precedenza sono tutti specificati da glPixelTransfer. Il contenuto della tabella di ricerca viene specificato da glPixelMap.
Il passaggio finale comporta la conversione degli indici o dei componenti nel formato appropriato, come specificato per tipo. Se il formato è GL_COLOR_INDEX o GL_STENCIL_INDEX e il tipo non è GL_FLOAT, ogni indice viene mascherato con il valore della maschera specificato nella tabella seguente. Se il tipo è GL_FLOAT, ogni indice intero viene convertito in formato a virgola mobile a precisione singola.
Se il formato è GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR_EXT, GL_BGRA_EXT, GL_LUMINANCE o GL_LUMINANCE_ALPHA e il tipo non è GL_FLOAT, ogni componente viene moltiplicato per il moltiplicatore visualizzato nella tabella precedente. Se il tipo è GL_FLOAT, ogni componente viene passato come è (o convertito nel formato a virgola mobile a precisione singola del client se è diverso da quello usato da OpenGL).
I valori restituiti vengono inseriti in memoria come indicato di seguito. Se il formato è GL_COLOR_INDEX, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA o GL_LUMINANCE, viene restituito un singolo valore e i dati per il th pixel nella riga j th vengono posizionati nella posizione (j)width + i. GL_RGB e GL_BGR_EXT restituiscono tre valori, GL_RGBA e GL_BGRA_EXT restituiscono quattro valori e GL_LUMINANCE_ALPHA restituisce due valori per ogni pixel, con tutti i valori corrispondenti a un singolo pixel che occupa spazio contiguo in pixel. I parametri di archiviazione impostati da glPixelStore, ad esempio GL_PACK_SWAP_BYTES e GL_PACK_LSB_FIRST, influiscono sul modo in cui i dati sono scritti in memoria. Per una descrizione, vedere glPixelStore .
I valori per i pixel che si trovano all'esterno della finestra connessa al contesto OpenGL corrente non sono definiti.
Se viene generato un errore, non viene apportata alcuna modifica al contenuto dei pixel.
La funzione seguente recupera informazioni correlate a glReadPixels:
glGet con argomento GL_INDEX_MODE
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato |
Windows 2000 Professional [solo app desktop] |
Server minimo supportato |
Windows 2000 Server [solo app desktop] |
Intestazione |
|
Libreria |
|
DLL |
|