2014年8月13日 星期三

[Matlab] GIF 動畫製作─1

利用程式繪圖熟悉了便非常簡單,也可畫出各式各樣的圖,但有否想過如果圖會動,是不是會更好?有些圖若是動畫,那會更吸引人注意,像是聲音的波形圖,若能做成動畫,甚至搭配上音訊,那就非常的棒了。這邊我用簡單的正弦函數做動畫給大家參考。
























程式碼:
t=0:0.1:10;
y=sin(pi*t);
i=1;
for j=1:101
    figure(i)
    plot(t,y)
    hold on;
    plot((i-1)/10,y(i),'or')
    frames(i)=getframe(gcf); %以getframe將每次的圖存進frames中
    close all;
    i=i+1;
end
dt=0.1; %設定每張圖的時間間隔,單位為秒
%下方開始將每個獲取到的frame轉成影像,並寫一個一個的存進檔名為 move_pic.gif 的檔案中
for i=1:101
    [image,map]=frame2im(frames(i));
    [im,map2]=rgb2ind(image,128);
    if i==1
        imwrite(im,map2,'move_pic.gif','gif','writeMode','overwrite','delaytime',dt,'loopcount',inf);
    else
        imwrite(im,map2,'move_pic.gif','gif','writeMode','append','delaytime',dt);
    end
end
若getframe抓取的是gca結果如下,可發現邊框不見了



















4 則留言:

  1. 若frames後續不會再使用,程式碼可以簡化如下
    t=0:0.1:2;
    y=sin(pi*t);
    i=1;dt=0.1;
    for j=1:21
    figure(i)
    plot(t,y)
    hold on;
    plot((i-1)/10,y(i),'or')
    [image,map]=frame2im(getframe(gca));
    [im,map2]=rgb2ind(image,128);
    if i==1
    imwrite(im,map2,'move_pic3.gif','gif','delaytime',dt,'loopcount',inf);
    else
    imwrite(im,map2,'move_pic3.gif','gif','writeMode','append','delaytime',dt);
    end
    close all;
    i=i+1;
    end

    回覆刪除
  2. 你好請問儲存的gif檔要去哪裡開啟?

    回覆刪除
    回覆
    1. 作者已經移除這則留言。

      刪除
    2. 他是存在當下的作業資料夾,若工作介面沒更動過,在寫程式碼的左方欄位就是資料夾位置,那邊可以找到檔案以及路徑。

      刪除

有任何問題可以詢問,我們會盡量回答