2017-02-09 570 views
3

請考慮以下函數,繪製一個動畫圖。Matlab:如何將動畫圖保存爲gif

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?

預先感謝您!

回答

4

是的,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以獲取更多信息。

+0

但是'frame = getframe(gcf);'中的'gcf'是什麼? – Eugeny89

+1

@ Eugeny89'gcf'返回當前圖形句柄。看看[文檔](https://es.mathworks.com/help/matlab/ref/gcf.html?requestedDomain=www.mathworks.com) – codeaviator

+0

正是,感謝@Cebri,'gcf'是得到目前的數字。因此,'getframe(gcf)'將抓住整個當前數字。如果您只想抓取當前軸(即沒有圖例,刻度標記等),您還可以使用'getframe(gca)'('gca' =獲取當前座標軸)。 – Florian