0

这是我关于堆栈溢出的第一篇文章。所以我在编程方面缺乏经验,但我对 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();
4

0 回答 0