【问题标题】:Matlab: how to save animated plot to a gifMatlab:如何将动画图保存为 gif
【发布时间】:2017-02-09 09:34:30
【问题描述】:

考虑以下绘制圆弧线动画图的函数。

function animate1()
    clear, clc

    R = 1; 
    na = -pi/2; 
    t = 0:0.05:6;
    v = 4; 

    for i = 1:length(t)
        x0 = v*t(i); 
        y0 = R;
        na = -v*t(i)/R; 
        fi = linspace(na,na+2*pi,100); 
        x = x0 + R*cos(fi); 
        y = y0 + R*sin(fi);

        xc(i) = x0 + R*cos(na);
        yc(i) = y0 + R*sin(na);

        plot(x,y,'b',... 
            xc(i),yc(i),'*m',... 
            xc,yc,'r') 
        axis([-1 25 0 1.5])
        axis equal
        pause(0.01)
    end

是否可以修改代码以输出动画图,例如转成 gif?

提前谢谢你!

【问题讨论】:

    标签: matlab gif


    【解决方案1】:

    是的,imwrite 确实支持动画 GIF。与 AVI 视频一样,您可以按顺序通过getframe 抓取帧。然后将它们传递给imwrite,尽管对于 GIF,您必须先将它们从 RGB 转换为 256 色图。像这样:

    for i = 1:nFrames
    
        % draw stuff
    
        frame = getframe(gcf);
        img =  frame2im(frame);
        [img,cmap] = rgb2ind(img,256);
        if i == 1
            imwrite(img,cmap,'animation.gif','gif','LoopCount',Inf,'DelayTime',1);
        else
            imwrite(img,cmap,'animation.gif','gif','WriteMode','append','DelayTime',1);
        end
    end
    

    查看openExample('matlab/WriteAnimatedGIFExample')doc imwrite 了解更多信息。

    【讨论】:

    • 但是frame = getframe(gcf); 中的gcf 是什么?
    • @Eugeny89 gcf 返回当前图形句柄。看看documentation
    • 没错,谢谢@Cebri,gcf 是 get current figure 的缩写。因此,getframe(gcf) 将获取整个当前数字。如果您只想获取当前轴(即没有图例、刻度标记等),也可以使用getframe(gca)gca = 获取当前轴)。
    猜你喜欢
    • 2020-02-27
    • 1970-01-01
    • 2021-04-25
    • 2018-11-13
    • 2019-12-03
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2014-02-14
    相关资源
    最近更新 更多