这是我关于堆栈溢出的第一篇文章。所以我在编程方面缺乏经验,但我对 C 和 Tscope 库感兴趣。无论如何,我一直在尝试自己做一些简单的实验。但是,我在位图图像呈现方面遇到了麻烦。
在我的测试实验中,参与者在每次试验中看到一个图像(例如“s1.bmp”)六次(总共 5 次试验)。参与者可以在他们喜欢的时间内看到图像(直到他们按下 SPACE 键)。最终,我将在每个试验中使用 2 张图像,并要求参与者交替查看这些图像,并在试验结束时确定他们更喜欢哪一张。然而在这种情况下,这对我来说并不重要,所以我要求参与者只用 SPACE 键重复查看一张图像。
我的麻烦是:在某些试验中,图像会出现并闪烁并清晰(并非在所有试验中)。奇怪的是,这个问题只发生在全屏模式下。我检查了一些设置值,但似乎不涉及刷新率和分辨率。我也更换了电脑并进行了实验,但这不是因素。
我怎样才能清除这种闪烁?
如果有人帮助我,那就太好了。谢谢你。
#include <tscope.h>
#define NTRIALS 5 // total 5 trials
struct {
int r; // for responses in each trial
} data[NTRIALS];
#define TRIALTEST 0 // If it's real run, define 0.
void setscreen()
{
ts_doublebuff(ON);
if (!TRIALTEST){
ts_scrsize(SIZE3);
ts_scrmode(FULLSCREEN);
}
else
ts_scrsize(SIZE1);
ts_init();
}
void introduction()
{
ts_defkey(KEY_SPACE); // define response keys (SPACE & ESCAPE)
ts_defkey(KEY_ESC);
ts_font(ARIAL, 16, REG);
ts_printf_centre(0, 0, "Press the SPACE key to start the experiment.");
__int64 junk;
ts_resp(&junk, &junk, 0); // wait for response
ts_clrscr();
}
map *a;
void readimage() // In this test case only one image is used.
{
a = ts_readbmp("s1.bmp");
}
void fixation() // prepare fixations in double buffer
{
ts_tobuff();
ts_fill(ON);
ts_fgcolor(BLACK);
ts_rect(-XMAX, -YMAX, XMAX, YMAX);
ts_fgcolor(WHITE);
ts_printf_centre(0,0, "+");
ts_toscr();
}
#define FIXTM mtt(500)
#define ITI mtt(1000)
struct { // for ts_resp() function
__int64 junk;
} tmd;
void trial(int i)
{
int t;
for (t = 0; t < 6; t++){ // In each trial fixation and image appear 6 times.
ts_vsync(&tmd.junk, &tmd.junk);
ts_blitbuff(); // present a fixation
ts_wait(FIXTM);
ts_vsync(&tmd.junk, &tmd.junk);
ts_blit(a, 0, 0); // present a image
ts_resp(&tmd.junk, &tmd.junk, 0); // wait for response (SPACE)
}
ts_clrscr();
ts_wait(FIXTM);
ts_vsync(&tmd.junk, &tmd.junk);
ts_printf_centre(0, 0, "Press the SPACE key to start next trial.");
data[i].r = ts_resp(&tmd.junk, &tmd.junk, 0);
ts_clrscr();
if (data[i].r == 2) // escape function
ts_fatal("aborted by user");
ts_wait(ITI);
}
int main()
{
setscreen();
introduction();
readimage();
fixation();
int i;
for (i = 0; i < NTRIALS; i++)
trial(i);
ts_killbmp(a);
ts_printf_centre(0, 0, "Thank you very much!");
ts_wait(mtt(3000));
return 0;
}
END_OF_MAIN();