画像ファイルの呈示
事前に次のことを理解しておいてください。
サンプルプログラムを動かすために、呈示画像(JPEG形式)を準備してrabbit.jpgという名前でプログラムと同じ場所に保存してください。適当な画像がなければ、下の画像をダウンロードしてください。ちなみにこの画像は、PsychDemosにある
「konijntjes1024x768.jpg」を縮小したものです。
サンプルプログラムは次の通りです。
function Image1
% 画像を呈示するだけ。何かのキーを押したら終了
try
AssertOpenGL;
ListenChar(2); %Matlabに対するキー入力を無効
%myKeyCheck;
screenNumber = max(Screen('Screens'));
[win, rect] = Screen('OpenWindow', screenNumber, 0);
%実験プログラムを保存しているフォルダ内にrabbit.jpgを準備してください。
myimgfile = 'rabbit.jpg';
%画像の読み込み
imdata = imread(myimgfile, 'jpg');
%画像サイズの幅(ix)が列の数に相当し、画像サイズの高さ(iy)が
%行の数の相当するため、返り値は、iy, ixの順番になっている。
[iy, ix, id] = size(imdata);
imagetex = Screen('MakeTexture', win, imdata);
%上と同じ
%imagetex = Screen('MakeTexture', win, imdata(1:iy, 1:ix, :));
%画像の左上だけを呈示
%imagetex = Screen('MakeTexture', win, imdata(1:iy/2, 1:ix/2, :));
Screen('DrawTexture', win, imagetex);
Screen('Flip', win);
KbWait;
sca;
ListenChar(0);
catch
sca;
ListenChar(0);
psychrethrow(psychlasterror);
end
注意点
- imreadで画像を配列に読み込みます。第1引数が画像のファイル名で、第2引数がファイル形式(または拡張子)です。imread関数はMatlabの関数で、PTBの関数ではありません。また、imformats関数で使用できるファイル形式を確認できます。
- size(imdata)の返り値の順番が [iy, ix, id]となっていることに注意してください。size関数は、行の数(1次元の数)、列の数(2次元の数)、3次元の数、の順番で値を返します。行の数は、画像のサイズでいうと、高さになりますので、iyとしています。ちなみに id はこのプログラムでは使用されていませんが、カラーの画像の場合は3となります。
Screen('MakeTexture', win, imdata(1:iy/2, 1:ix/2, :));
のようにすると、画像の情報が入っているimdataのある部分だけを画像として呈示することができます。