HereItIs
HereItIs

Reputation: 154

PsychToolBox GetImage doesn't save using given rect dimensions

I'm trying to save a cropped portion of the screen from my PTB experiment, but the Screen('GetImage',...) function is not working properly. Here is my code:

    screenNumber = 0;

    % Open screen with grey background
    [w, rect] = Screen('OpenWindow', screenNumber,...
        background,[], [], [],[],6);

    [xCenter, yCenter] = RectCenter(rect);
    sideLength = randi([100 175], 1);
    baseRect = [0, 0, sideLength, sideLength];

    % Center the frame
    centeredRect = CenterRectOnPoint(baseRect, xCenter, yCenter);

    %dot position 
    dots.x = randi([ round(xCenter - (sideLength/2))+15  round(xCenter + (sideLength/2))-15], 1, numeral);
    dots.y = randi([round(yCenter - (sideLength/2))+15 round(yCenter + (sideLength/2))-15], 1, numeral);
   
   %skipping code to move dots.x into dot_info.position for brevity

    Screen('DrawDots',w, dot_info.position, dot_info.size,...
                        dot_info.colour, [], 2); %dots are drawn to center of screen
                    
    Screen('Flip', w);
                                         
                    
    % Save dot cue
    %im = Screen('GetImage', w);
    im = Screen('GetImage', w, centeredRect);

    imwrite(im, filename);

The issue is that there should be a small square image, centered on the centeredRect rectangle, which contains the dots I've drawn. However, all I get is a correctly sized rectangle without the dots. If I save without passing the centeredRect parameter (commented out line), I get a saved picture of the whole screen, showing the dots in the center - so I know the dots are being drawn. There must be something wrong with the GetImage call and its use of the rect, such that its not saving from the center point of the screen, so i just get the background. When I run this on my monitor it works fine, but on my laptop it does not. Unfortunately I don't have access to my monitor now so I need to get this to work on my laptop. I've checked with a Screens() call and there is only one screen: screen 0 - my laptop screen.

Any help greatly appreciated. Thanks.

Upvotes: 0

Views: 66

Answers (1)

HereItIs
HereItIs

Reputation: 154

SOLVED: I'm not sure why this worked, but I had to multiply the elements in centeredRect by 2. Hoping this helps someone else in future.

Upvotes: 0

Related Questions