2014-09-12 20 views
0

在我的实验中,我显示了很多不同的光栅。为了在实验执行过程中节省时间,我预先绘制了相应的纹理并将它们保存在缓冲区中。然而,这需要大约10-20秒,具体取决于运行使用的刺激数量以及机器的速度。Psychtoolbox:我可以保存预先绘制的纹理到我的硬盘吗?

我想知道是否有一种方法在硬盘上存储预先绘制的纹理,并让它们读入?

下面是当前的代码:

tic 
    stimulus_matrix = []; 
     for ifrequencies = 1:length(frequencies) 
     for iphase = 1:length(phases) 
      for icontrast_manipulation = 1:length(contrast_manipulation) 
       for icontrast_values = 1:length(contrast_values(1,:)) 

grating = makeStimulus(contrast_values(icontrast_manipulation,icontrast_values),grating_size_degrees,phases(iphase),frequencies(ifrequencies,1)); 

stimulus_matrix(ifrequencies,iphase,icontrast_manipulation,icontrast_values) = Screen('MakeTexture', my_window, grating); 

Screen('FillOval', stimulus_matrix(ifrequencies,iphase,icontrast_manipulation,icontrast_values), background, CenterRect(ovalRect,gratingRect)); 


       % Display a progress bar during buffering 
       % code for progress bar removed for clarity 

      end 
     end 
    end 
end 

回答

1

可以使用

save('mydata.mat',stimulus_matrix); 

,当你需要的矩阵,可以加载它。

load mydata.mat; 

然后根据需要使用stimulus_matrix。

+0

嗨yangscar,对不起,基本上从来没有回应。正如昨天发布的评论中所述,stimulus_matrix实际上并不包含刺激纹理,而只是指向那些纹理的指针。纹理本身的存储方式并不适用于psychtoolbox之外的功能:psychtoolbox为工作区中每个创建的纹理创建变量,但这些变量只包含一个数字。因此我猜想,实际的纹理会存储在用户不应该访问的内存中。 – Chris 2015-03-30 07:25:30

0

是不是stimulus_matrix只是生成的纹理索引?这些指标只是指针。所以如果你关闭纹理但保持窗口打开,我不认为加载矩阵可以让你再次绘制纹理。

+0

对不起,以前没有回复 - 但这正是问题所在。 stimulus_matrix实际上只是指向PTB纹理的指针矩阵,而不是纹理本身。到目前为止,我还没有找到一种方法将这些纹理(存储在RAM或VRAM中,我猜)保存起来。 – Chris 2015-03-30 07:22:40

0

不知道这是非常适合您的情况,但你可以尝试:

screen_array = Screen('GetImage', my_window); 

而纹理绘制。这会给你一个当时屏幕内容的三维数组(包括你的纹理),然后你可以编辑它以仅包含你的纹理,和/或随后导出。

相关问题