glReadPixels 関数

glReadPixels 関数は、フレームバッファーからピクセルのブロックを読み取ります。

構文

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

パラメーター

x

フレームバッファーから読み取られた最初のピクセルのウィンドウ x 座標。 y 座標と共に、四角形のピクセル ブロックの左下隅の位置を指定します。

y

フレームバッファーから読み取られた最初のピクセルのウィンドウ y 座標。 x 座標と共に、四角形のピクセル ブロックの左下隅の位置を指定します。

width

ピクセル四角形の幅。

height

ピクセル四角形の高さ。 値 "1" の高さのパラメーターは、1 つのピクセルに対応します。

format

ピクセル データの形式。 次のシンボリック値を使用できます。

説明
GL_COLOR_INDEX
色インデックスは、 glReadBuffer によって選択されたカラー バッファーから読み取られます。 各インデックスは固定小数点に変換され、GL_INDEX_SHIFTの値と符号に応じて左または右にシフトされ、GL_INDEX_OFFSETに追加されます。 GL_MAP_COLORがGL_TRUEされている場合、インデックスはテーブル GL_PIXEL_MAP_I_TO_I内のマッピングに置き換えられます。
GL_STENCIL_INDEX
ステンシル値はステンシル バッファーから読み取られます。 各インデックスは固定小数点に変換され、GL_INDEX_SHIFTの値と符号に応じて左または右にシフトされ、GL_INDEX_OFFSETに追加されます。 GL_MAP_STENCILがGL_TRUEされている場合、インデックスはテーブル GL_PIXEL_MAP_S_TO_S内のマッピングに置き換えられます。
GL_DEPTH_COMPONENT
深度値は深度バッファーから読み取られます。 各コンポーネントは、最小深度値が 0.0 にマップされ、最大値が 1.0 にマップされるように浮動小数点に変換されます。 次に、各コンポーネントにGL_DEPTH_SCALEを乗算し、GL_DEPTH_BIASに追加し、最後に [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
処理は、カラー バッファーにカラー インデックスと RGBA カラー コンポーネントのどちらを格納するかによって異なります。 カラー インデックスが格納されている場合は、 glReadBuffer によって選択されたカラー バッファーから読み取られます。 各インデックスは固定小数点に変換され、GL_INDEX_SHIFTの値と符号に応じて左または右にシフトされ、GL_INDEX_OFFSETに追加されます。 その後、インデックスは、GL_PIXEL_MAP_I_TO_R、GL_PIXEL_MAP_I_TO_G、GL_PIXEL_MAP_I_TO_B、およびGL_PIXEL_MAP_I_TO_Aテーブルのインデックスを作成することによって取得された赤、緑、青、アルファ値に置き換えられます。 RGBA カラー コンポーネントがカラー バッファーに格納されている場合は、 glReadBuffer によって選択されたカラー バッファーから読み取られます。 各色コンポーネントは、0 の強度が 0.0 に、完全な強度が 1.0 にマップされるように、浮動小数点に変換されます。 次に、各コンポーネントにGL_c_SCALEを乗算し、c がGL_RED、GL_GREEN、GL_BLUE、GL_ALPHAであるGL_c_BIASに追加します。 各成分は[0,1]の範囲にクランプされる。 最後に、GL_MAP_COLORがGL_TRUEされている場合、各色コンポーネント c はテーブル GL_PIXEL_MAP_c_TO_c内のマッピングに置き換えられます。ここでも c はGL_RED、GL_GREEN、GL_BLUE、およびGL_ALPHA。 各コンポーネントは、参照が実行される前に、対応するテーブルのサイズにスケーリングされます。 最後に、不要なデータは破棄されます。 たとえば、GL_REDは緑、青、アルファの各コンポーネントを破棄し、GL_RGBはアルファ コンポーネントのみを破棄します。 GL_LUMINANCEでは、赤、緑、青の各コンポーネントの合計として 1 つのコンポーネント値が計算され、アルファを 2 番目の値として保持しながら、GL_LUMINANCE_ALPHAは同じになります。

type

ピクセル データのデータ型。 次のいずれかの値を指定する必要があります。

Type インデックス マスク コンポーネント変換
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 なし c

ピクセル

ピクセル データを返します。

戻り値

この関数は値を返しません。

エラー コード

glGetError 関数では、次のエラー コードを取得できます。

名前 意味
GL_INVALID_ENUM
format または type が受け入れ可能な値ではなかった。
GL_INVALID_VALUE
または高さが負の値でした。
GL_INVALID_OPERATION
形式 がGL_COLOR_INDEXされ、カラー バッファーには RGBA または BGRA カラー コンポーネントが格納されました。
GL_INVALID_OPERATION
format がGL_STENCIL_INDEXされ、ステンシル バッファーがありませんでした。
GL_INVALID_OPERATION
形式 がGL_DEPTH_COMPONENTされ、深度バッファーがありませんでした。
GL_INVALID_OPERATION
glBegin の呼び出しと glEnd の対応する呼び出しの間に関数が呼び出されました。

解説

glReadPixels 関数は、左下隅が位置 (xy) にあるピクセルから始まるフレームバッファーから、位置ピクセルからクライアント メモリにピクセル データを返します。 いくつかのパラメーターは、ピクセル データをクライアント メモリに配置する前に処理を制御します。 これらのパラメーターは、glPixelStore、glPixelTransferおよび glPixelMap の 3 つのコマンドで設定されます。 このトピックでは、これら 3 つのコマンドで指定されたすべてのパラメーターではなく、ほとんどの glReadPixels に対する影響について説明します。

glReadPixels 関数は、0 = i <の幅と 0 = j < の高さについて、左下隅が (x + i、 y + j) の各ピクセルから値を返します。 このピクセルは、j番目の行のi番目のピクセルであると言われる。 ピクセルは、各行で最も低い行から最も高い行 (左から右) に行順に返されます。

上記のシフト、スケール、バイアス、および参照係数はすべて glPixelTransfer で指定されています。 参照テーブルの内容は glPixelMap によって指定されます。

最後の手順では、インデックスまたはコンポーネントを で指定された適切な形式に変換します。 format がGL_COLOR_INDEXまたはGL_STENCIL_INDEXで、type がGL_FLOATされていない場合、各インデックスは次の表に示すマスク値でマスクされます。 type がGL_FLOATの場合、各整数インデックスは単精度浮動小数点形式に変換されます。

format がGL_RED、GL_GREEN、GL_BLUE、GL_ALPHA、GL_RGB、GL_RGBA、GL_BGR_EXT、GL_BGRA_EXT、GL_LUMINANCE、またはGL_LUMINANCE_ALPHAで、がGL_FLOATされていない場合、各コンポーネントは前の表に示す乗数で乗算されます。 type がGL_FLOATの場合、各コンポーネントは そのまま渡されます (OpenGL で使用される形式と異なる場合は、クライアントの単精度浮動小数点形式に変換されます)。

戻り値は、次のようにメモリに配置されます。 format がGL_COLOR_INDEX、GL_STENCIL_INDEX、GL_DEPTH_COMPONENT、GL_RED、GL_GREEN、GL_BLUE、GL_ALPHA、またはGL_LUMINANCEの場合、1 つの値が返され、j番目の行の i番目のピクセルのデータが位置 (j )width + i に配置されます。 GL_RGBとGL_BGR_EXTは 3 つの値を返し、GL_RGBAとGL_BGRA_EXTは 4 つの値を返し、GL_LUMINANCE_ALPHAはピクセルごとに 2 つの値を返し、1 つのピクセルに対応するすべての値が ピクセル単位の連続した空間を占有します。 GL_PACK_SWAP_BYTESやGL_PACK_LSB_FIRSTなど、 glPixelStore によって設定されたストレージ パラメーターは、データがメモリに書き込まれる方法に影響します。 詳細については 、「glPixelStore 」を参照してください。

現在の OpenGL コンテキストに接続されているウィンドウの外側にあるピクセルの値は未定義です。

エラーが生成された場合、 ピクセルの内容は変更されません。

次の関数は、 glReadPixels に関連する情報を取得します。

引数GL_INDEX_MODEを含む glGet

必要条件

要件
サポートされている最小のクライアント
Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows 2000 Server [デスクトップ アプリのみ]
ヘッダー
Gl.h
ライブラリ
Opengl32.lib
[DLL]
Opengl32.dll

関連項目

glBegin

glCopyPixels

glDrawPixels

glEnd

glPixelMap

glPixelStore

glPixelTransfer

glReadBuffer