% generate calibration bmps
try
    myimgdir='tempbmps';

    clear ivx;

    makecolorim=0;
    makehighcontrastim=0;
    whitemarkers=1;
    colors=[255 255 255; 255 0 0; 0 255 0; 0 0 255; 255 255 0;255 255 255;255 255 255;255 255 255;255 255 255;255 255 255;255 255 255;255 255 255;255 255 255;255 255 255;255 255 255;255 255 255;255 255 255];


    screenNumber=max(Screen('Screens'))
    [w, screenRect]=Screen('OpenWindow', screenNumber, 0, [],32,2);
    WindowSize(w)
    white=WhiteIndex(screenNumber);
    black=BlackIndex(screenNumber);
    %     gray=round((white+black)/2);
    gray=GrayIndex(screenNumber);
    Screen('FillRect',w, gray);
    Screen('Flip',w);
    ivx=iViewXInitDefaults(w);

    points=5;

    shift=[0 0];

    scale=35;
    scale=[scale scale];

    ivx=iViewXSetCalPoints(ivx, points, shift, scale);

    [dummy,dummy]=mkdir(myimgdir);
    fprintf('Generating calibration BMP using %d points.\n', ivx.nCalPoints);

    if 0==makehighcontrastim
        Screen('FillRect',w, gray);
    else
        Screen('FillRect',w, black);
    end

    for i=1:ivx.nCalPoints
        point=ivx.absCalPos(i,:);
        rect=CenterRectOnPoint(ivx.calRect, point(1), point(2));
        f=8;
        brect=ScaleRect(rect,f,f);
        brect=CenterRectOnPoint(brect, point(1), point(2));


        if 0==makecolorim
            mycrosscolor=ivx.calPointColour;
                mycolor=ivx.calPointColour;
        else
            mycrosscolor=squeeze(colors(i,:));
            if whitemarkers==1
                mycolor=ivx.calPointColour;
            else
                mycolor=squeeze(colors(i,:));

            end
           
        end
        
        Screen('DrawLine', w, mycrosscolor, brect(1), brect(2), brect(3), brect(4) ,8);
        Screen('DrawLine', w, mycrosscolor, brect(1), brect(4), brect(3), brect(2) ,8);
        Screen('FillOval',w, mycolor, rect);

        rect=CenterRectOnPoint(ivx.calRectCenter, point(1), point(2));
        Screen('FillOval',w, ivx.calPointColourCenter, rect);
    end

    %     Screen('Flip',w);
    % WaitSecs(1);

    % we need to get the image before the flip
    if 1 imageArray=Screen('GetImage', w ); end

    Screen('Flip',w);
    if 0 imageArray=Screen('GetImage', w ); end

    [w2, screenRect2]=Screen('OpenWindow', 0, 0, [],32,2);

    if 1 imageArray2=Screen('GetImage', w2 ); end

    Screen('FillRect',w2, [128 128 0]);
%     Screen('Flip',w2);

    Screen('PutImage', w2, imageArray);
    Screen('Flip',w2);

    Screen('FillRect',w, black);
    Screen('PutImage', w, imageArray2);
    Screen('Flip',w);
    WaitSecs(1);
    type='bmp';

    [h v]=WindowSize(w);

    Screen('CloseAll');
    imtype='XXX';
    if makecolorim==1
        if makehighcontrastim==1
            imtype='BCX';
        elseif makehighcontrastim==0
            imtype='GCX';
        end
    elseif makecolorim==0
        if makehighcontrastim==1
            imtype='BWX';
        elseif makehighcontrastim==0
            imtype='GWX';
        end
    end
    imgname=[num2str(ivx.nCalPoints) 'pt' num2str(h) 'x' num2str(v) 'off' num2str(shift(1)) 'x' num2str(shift(2)) 'sc' num2str(scale(1)) 'x' num2str(scale(2)) imtype ];
    imgpath=[myimgdir filesep imgname '.bmp'];
    fprintf('Saving BMP to %s\n', imgpath);
    imwrite(imageArray, imgpath, 'bmp');

    fprintf('\nEnd of image generation.\n');
catch
    %this "catch" section executes in case of an error in the "try" section
    %above.  Importantly, it closes the onscreen window if its open.
    %     pnet('closeall');
    Screen('CloseAll');    rethrow(lasterror);
end %try..catch..