Screen('DrawText')
[newX,newY]=Screen('DrawText', windowPtr, text [,x] [,y] [,color] [,backgroundColor] [,yPositionIsBaseline] [,swapTextDirection]);
テキスト(文字列)を描画します。text は日本語、中国語などのunicodeの文字を含んでもかまいません。
標準のMatlab またはOctave では、文字列はScreen のエンコード設定に基づいて解釈されます。
デフォルトは、お使いのパソコンのユーザーアカウントの言語設定によります。
このエンコードの設定は
Screen('Preference', 'TextEncodingLocale', newencoding);
を呼び出すことによって、いつでも変更できます。
例えば、UTF-8 のマルチバイトのエンコードを使用したいときは
Screen('Preference','TextEncodingLocale','UTF-8');
とします。
もし、非アスキーの文字列を使いたくて、かつ、Matlab(Octave)にその文字列をいじられたくない場合は、DrawTextコマンドに渡す前に、当該文字列をuint8() 型に変換してください。
もし、unicodeの文字列を直接DrawTextコマンドに渡したいときは、当該文字列をdouble型に変換してください。
例えば次のようにします。
mytext = double(myunicodetext);
Screen 関数は、すべてのdouble型をunicodeとして解釈します。
unicodeの文字列の描画は、デフォルトのハイクオリティーなテキストレンダラーを選択している場合には、すべてのOSでサポートされています。もちろん、適切なunicodeのフォントを選択する必要があります。すべてのフォントにunicodeの文字列が含まれているわけではないので注意して下さい。
レンダラーについてですが、動作が速いけれども、ロークオリティで、アンチエイリアスもunicodeもサポートされていない、文字が描画される場所もあまり正確でないものを選択することもできます。
もし、他のなにを犠牲にしても速度を重視する場合にはこの選択肢は適切でしょう。
プログラムの上部で、次のように選択します。
Screen('Preference', 'TextRenderer', 0);
--- 描画される文字の場所と色に関するパラメーター ---
"x" "y" は、ペンのスタート位置を指定します。
デフォルトは、前回の描画コマンドでのペンの位置か、一番最初に呼ばれたときは (0, 0) です。
"color" は、文字の色で、RGB値の3要素か、アンチエイリアスのアルファを含めた4要素です。デフォルトは黒です。
"backgroundColor" は、文字の背景の色です。デフォルトでは、透明の背景になり、なにかの図形の上に文字を描画した場合は、図形の上に文字が表示されます。
背景を描画するには、背景色を明示的に指定し、次の関数を使ってアルファブレンディングを定義する必要があります。
Screen('Preference', 'TextAlphaBlending', 1);
Screen('Blendfunction', ...)
背景+テキストの見え方は、OS間で、またレンダラー間で異なるかもしれません。もしくはまったくサポートされていないかもしれません。つまり信頼できない機能です。
"yPositionIsBaseline" テキストの位置に関するグローバルな設定を上書きします。デフォルトはオフです。
1に設定されているとき、引数 "y" は描画されるテキストの基準線を定義します。1以外では、テキストの上部(top)を定義します。
古いPTBでは、1に設定しているときと等価な動作があり、その動作が繰り返されないという不具合がありますした。そこでデフォルトでの動作を変更しました。
"swapTextDirection" 1に設定されていると、テキストの方向がデフォルト(左から右)から、右から左に変更されます。ヘブライ文字の描画などのために用意されています。
"newX, newY" 描画に用いたペンの最後の位置を返します。
---
Screen('Preference', ...); によって、テキスト描画に影響を与える設定(アルファブレンディング、アンチエイリアスなど)を変更することができます。
テキストレンダラーについて。
Screen('Preference', 'TextRenderer', Type);
Type 0 のとき、動作の速いOS独自のテキストレンダラー。unicodeはサポートしていません。アンチエイリアスもサポートしていません。適応性は低いですが、とにかく早い。a OpenGL display list renderer のように、windowsとlinuxでサポートされています。
Type 1 のとき、OS独自のハイクオリティーなレンダラー。Type 0 よりは遅いけれど、unicode、アンチエイリアス、その他にもいくつかの機能をサポートしています。windowsでは、GDIベースのレンダラーです。mac os x ではアップルのATSUテキストレンダラーで、これはType 0 でも使われています。Linux ではFTGLベースのレンダラーです。
Type 2 のとき、FTGLベースのレンダラー。(Linux での Type 1と同じ)mac でも利用可能ですが、windowsでは不可。
---
Screen('DrawText') は、テキストのレイアウトはサポートしていません。もし、テキストを中央揃えさせたい、line wrapping (改行時に先頭に不適切な文字がこないようにする機能?)したい場合などは、DrawFormattedText() を使ってください。