Screen('GetImage')

この関数を使うと、実験画面のキャプチャー画像を取得することができます。(MATLABのimwrite関数と併用します)

研究発表で実験画面を説明するときなどに便利です。

imageArray=Screen('GetImage', windowPtr [,rect] [,bufferName] [,floatprecision=0] [,nrchannels=3])

ウィンドウやテクスチャーの画像データを低速にコピーします。デフォルトでは、uint8型の配列でデータが取得されます。

Screen('AsyncFlipBegin') 関数によって an asynchronous flip が保留されているあいだに、オンスクリーンウィンドウに対してこの関数を呼び出してはいけません。まずは、そのようなフリップを終わらせる必要があります。

非同期のフリップのあいだに、その他のオンスクリーンウィンドウ、またはオフスクリーンやテクスチャーにReadbackすることは可能ですが、そのような動作はパフォーマンスに深刻な影響を与えるのでお勧めできません。

戻り値(imageArray)はデフォルトで3次元のデータになっています。すなわち、RGBの画像データです。

"windowPtr" は、オンスクリーンウィンドウ(またはオフスクリーン、テクスチャー)へのハンドルで、ここで指定されたものが画像データとして取得されます。

"rect" で、コピーする部分を指定できます。デフォルトではウィンドウ全体をコピーします。

もし、取得したデータ(uint8型になります)に対してそのまま算術演算を行おうとするとエラーになります。double関数で変換してください。

つまり、

imageArray/255

という計算はエラーになるので、

double(imageArray)/255

とする必要があります。

Screen PutImage?

Screen CopyWindow?

も参照してください。

"bufferName" で指定されたバッファーから、画像データをコピーします。したがって、オフスクリーンウィンドウおよびテクスチャーに対しては、無効です。オンスクリーンウィンドウに対してのみ有効であり、デフォルトでは、'frontBuffer'となり、実験参加者に、今まさに呈示している画像をコピーします。

OpenGL-ES ハードウェアについては、'backBuffer' または 'drawBuffer'を除くすべてのバッファーが無視されます。コピーされる画像データは常に、'backBuffer' または 'drawBuffer'のデータです。この挙動は避けることができません。

もし、frame-sequential stereo modeが有効な場合は、'frontLeftBuffer' には実験参加者の左眼に呈示されている画像データが、'frontRightBuffer' には右眼に呈示されている画像データが保存されています。

もし、double-buffering が有効な場合は、'backBuffer'のデータにアクセスすることも可能です。'backBuffer'には、次のScreen('Flip')で実験参加者に呈示される画像データが保存されています。

frame-sequential stereo においては、'backLeftBuffer'および'backRightBuffer' もアクセスできます。

'aux0Buffer' から 'aux3Buffer' については、OpenGL AUXバッファーの0番から3番までのデータが保存されています。これについては、AUXバッファーに精通している人だけが利用して下さい。でないとフリーズします。PTBの内部のデバッグに関わるものです。

the imaging pipeline が有効な場合は、未処理のバックバッファー、すなわち、パイプライン('drawBuffer'による)によって処理される前のデータにアクセスできます。

また、'backBuffer' への要求は、 Screen('Flip')、 Screen('AsyncFlipBegin')、Screen('DrawingFinished')を呼び出したあとのデータにのみ、アクセスすることになります。でなければ、古い結果を参照することになります。

If our own homegrown frame-sequential stereo mode is in use, querying the

'backLeftBuffer' and 'backRightBuffer' is well defined, after a Screen('Flip')

or Screen('DrawingFinished'), but querying the 'frontLeftBuffer' or

'frontRightBuffer' or 'frontBuffer' will result in an assignment of left- and

right- stereo images that is mostly based on chance, e.g., you may get

accidentally swapped left- and rightBuffer images!

"floatprecision" が1に設定されているときは、uint8型ではなく、double型で値が返されます。

一般的な画像データについては、0から255の値ではなく、0.0から1.0に正規化されたデータになる点に注意してください。

このような浮動小数点のデータは、imaging pipelineがアクティブで、かつHDRモードが選択されているときの、浮動小数点精度のテクスチャーやオフスクリーン、フレームバッファー(すなわち、各色が8ビット以上のデータ)に対してのみ意味があります。

OpenGL-ES ハードウェアについては、浮動小数点型のフレームバッファーのみが、'floatprecision' readbackをサポートしています。

"nrchannels" は、 色チャンネルの数です。デフォルトではRGBの3チャンネルです。赤(または輝度)チャンネルのみの場合は1、赤緑または「輝度+Alpha」に対しては2、RGBに対しては3、RGBAに対しては4となります。OpenGL-ES ハードウェアについては、2を設定することはできません。

See also: PutImage CopyWindow CreateMovie FinalizeMovie