Масштабируйте выходные данные фильма () перед воспроизведением фильма. - PullRequest
1 голос
/ 11 октября 2019

Я пытаюсь создать movie() мерцающей шахматной доски в matlab. Я использую следующий код для создания фреймов:

close all;

n=80; % length of checkerboard squares in pixels
p=5; % number of checkerboard rows
q=6; % number of checkerboard columns
loops=100;

A=zeros(p*n,q*n,2);
my_checkerboard=logical(checkerboard(n,p,q));
A(:,:,1)=double(my_checkerboard(1:p*n,1:q*n));
A(:,:,2)=ones(p*n,q*n);
%A(:,:,2)=double(~my_checkerboard(1:p*n,1:q*n));
F(loops)=struct('cdata',[],'colormap',[]);

h=figure;
for ii=1:1000
    figure(h);
    imshow(A(:,:,mod(ii,2)+1));
    drawnow;
    F(ii)=getframe;
end

Теперь, если я играю в таком фильме, как этот

close all;
h=figure;
movie(h,F,1,10)

, я смогу масштабировать фильм, рисуяуглы фигуры. Но если я масштабирую фигуру раньше, как это

close all;
h=figure('Position',[2640,280,960,800]);
movie(h,F,1,10)

, фильм не будет масштабироваться с этой цифрой. Вместо этого фильм будет проигрываться в левом нижнем углу рисунка.
У меня было ощущение, что это можно сделать, масштабируя не только фигуру, но и ось, но я не мог понять, как это сделать. .

РЕДАКТИРОВАТЬ: Я также был бы рад, если бы кто-то мог связать меня некоторые ресурсы на генератор картинок или что-то, что может легко создать масштабируемую мерцающую шахматную доску с настраиваемым количеством плиток.

1 Ответ

1 голос
/ 12 октября 2019

Я думаю, что в MATLAB есть ошибка movie ...

В большинстве случаев работает следующий код:

close all;

n=80; % length of checkerboard squares in pixels
p=5; % number of checkerboard rows
q=6; % number of checkerboard columns
loops=100;

A=zeros(p*n,q*n,2);
my_checkerboard=logical(checkerboard(n,p,q));
A(:,:,1)=double(my_checkerboard(1:p*n,1:q*n));
A(:,:,2)=ones(p*n,q*n);
%A(:,:,2)=double(~my_checkerboard(1:p*n,1:q*n));
F(loops)=struct('cdata',[],'colormap',[]);

h=figure;
for ii=1:10
    figure(h);
    %imshow(A(:,:,mod(ii,2)+1));
    imshow(A(:,:,mod(ii,2)+1), 'Border', 'tight'); %Show image without borders
    drawnow;
    F(ii)=getframe;
end

savefig(h, 'h.fig') %Save the figure to a file, (not the best solution).

%Playing the movie
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close all;
h = openfig('h.fig'); %Load the figure

% h=figure;
movie(h,F,1,10)

Сохранение и загрузка рисунка, это простой способдля сохранения размеров оригинальной фигуры.

...