动画创建期间的matlab图像弹出

matlab image popping during animation creation

本问题已经有最佳答案,请猛点这里访问。

我会尽力解释我的问题。我正在模拟网络的动态,我想获得一个动画,其中每一帧代表我的网络,每个节点相对于输入文件具有特定的颜色。
这是我的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 for ii=1:Movie_size

hfig=figure('visible','off');
hold on;

%plot edges
    for kk=1:Nedge,
        plot(xedge(kk,:),yedge(kk,:),'black')
    end

%color of the nodes
    for kk=1:nodes,
        val=(1-(Color_node(12798 ,kk)-umin)/(umax-umin));
        ggCol(kk,:)=[1,val,1-val];
    end

%enhanced the contrast of the figure
    ggCol = imadjust(ggCol,[.2 .3 0; .6 .7 1],[]);

%plot nodes
    for kk=1:nodes,
        plot(xpos(kk),ypos(kk),'o','MarkerFaceColor',ggCol(kk,:), ...
            'MarkerEdgeColor','k','MarkerSize',10)
    end

    frames(ii)=getframe(hfig);

    hold off;

end

movie(frames);

我成功地绘制了每一帧,但是当我想获得动画时,我显示了所有的数字,没有电影。我尝试了很多不同的东西,但它从来没有奏效...

PS:我一直在编辑标题,因为主题似乎已经被问过了...


虽然你已经调用了 getframe 来获取当前图形的屏幕截图,但你需要对这个帧做一些事情来制作电影。典型的做法是将此框架添加到循环中现有的 VideoWriter 对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
writer = VideoWriter('output.avi');

hfig = figure();
hplot = plot(rand(10,1));

for k = 1:100
    % Update the plot
    set(hplot, 'YData', rand(10, 1));

    % Take a screengrab and add it to the video file
    frame = getframe(hfig);
    writer.writeVideo(frame);
end

writer.close()

或者,您可以创建一个帧数组,然后在 MATLAB 中使用 movie.

以交互方式显示这些帧

1
2
3
4
5
6
for k = 1:100
    frames(k) = getframe(hfig);
end

% View as a movie
movie(frames)

更新

根据您更新的问题,必须弹出窗口,因为 getframe 必须先渲染图形,然后才能捕获屏幕。此外,您已经创建了帧数组,但还没有尝试显示电影。你需要:

1
movie(frames)