Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 播放电影前缩放电影()的输出_Matlab_Animation_Matlab Figure - Fatal编程技术网

Matlab 播放电影前缩放电影()的输出

Matlab 播放电影前缩放电影()的输出,matlab,animation,matlab-figure,Matlab,Animation,Matlab Figure,我正试图在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)

我正试图在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: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)
我可以通过画人物的角来缩放电影。但是如果我之前像这样缩放人物的话

close all;
h=figure;
movie(h,F,1,10)
close all;
h=figure('Position',[2640,280,960,800]);
movie(h,F,1,10)
电影将不会随人物缩放。相反,电影将在人物的左下角播放。
我觉得这不仅可以通过缩放图形,还可以缩放轴来实现,但我不知道该怎么做


编辑:我也很高兴,如果有人能在gif生成器或其他东西上给我链接一些资源,可以轻松创建一个可缩放的闪烁棋盘和可定制数量的瓷砖。

我认为MATLAB
电影中有一个bug

以下代码在大多数情况下有效:

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)

保存和加载图形只是保持原始图形尺寸的一种简单方法。

为什么不将
n
设置为更大的值?@Rotem,因为这不适用于电影()。试一下代码,你就会看到。试一下
n=10
n=80
n=200
,你就会看到区别。当
my_checkboard
的分辨率太大,并且图形尺寸太大而无法适应屏幕时,它将停止工作。@rotem不,它不会,请尝试代码!它适用于imshow,但不适用于fpr电影。这部电影的固定分辨率为560×420。请参阅文档。因此,如果我设置更高的n,棋盘将不会完全显示在图中。对不起,我看到了
imshow
部分,并且没有等待1000帧的电影部分。这确实有效,谢谢。另一个解决方案(特别是出于我的目的)是将棋盘保存为gif格式,而不是使用movie()。我会试着弄明白,为什么保存这个数字是可行的,而另一种方法却不行。