図形の中央に文字列を描画

円の中央に文字列を描画する方法です。

Screen('TextBounds')

を使用すると、スクリーン上で文字列が占める長方形領域を知ることができます。

これを利用すると、図形の中心と、文字列の中心とを一致させることができます。

Screen('TextBounds')

を呼び出す前にフォントの種類、サイズ、描画文字列を設定しておくことを忘れないようにしてください。

%画面の中央に円と文字列を描画する
function TextPosCheck
ListenChar(2);
AssertOpenGL;
KbName('UnifyKeyNames');
%myKeyCheck;
try
    
    screenNumber=max(Screen('Screens'));
    %ウィンドウでの呈示
    %[windowPtr, windowRect]=Screen('OpenWindow', screenNumber, [0 0 0], [100, 200, 700, 600]);
    %フルスクリーンでの呈示
    [windowPtr, windowRect]=Screen('OpenWindow', screenNumber, [0 0 0]);
  
    %画面の中央の座標
    [centerX centerY] = RectCenter(windowRect);
    %赤い円の描画
    Radius = 30; %円の半径
    tmpRect = [centerX - Radius, centerY - Radius, centerX + Radius, centerY + Radius]
    Screen('FrameOval', windowPtr, [255 0 0], tmpRect);
    %描画する文字列
    Screen('TextFont',windowPtr, 'Courier New'); % フォントの種類によっては中央に描画できないことがあります。
    Screen('TextSize',windowPtr, 30);     
    teststr = 'ab';
    
    %スクリーン上で文字列が占める長方形領域が normBoundsRect
    %事前にフォントの設定を済ませておくこと。
    [normBoundsRect, offsetBoundsRect]= Screen('TextBounds', windowPtr, teststr);
    
    %動作確認のためにnormBoundsRectを緑で描画してみましょう。
    tmpRect = CenterRectOnPoint(normBoundsRect, centerX, centerY);
    Screen('FrameRect', windowPtr, [0 255 0], tmpRect);
            
    %文字列の描画(赤い円と緑の四角の中央に描画されるでしょうか)     
    startX = centerX - normBoundsRect(RectRight)/2;
    startY = centerY - normBoundsRect(RectBottom)/2;
    DrawFormattedText(windowPtr, teststr, startX, startY, [255 255 255]);
    Screen('Flip', windowPtr);
    KbWait;
    
    %終了処理
    Screen('CloseAll');
    ShowCursor;
    ListenChar(0);
 
catch    
    %終了処理
    Screen('CloseAll');
    ShowCursor;
    ListenChar(0);
    psychrethrow(psychlasterror);
end;