天天看點

imwrite函數 matlab_使用MATLAB建立gif動畫詳解

上課期間,和同學們提起matlab可制作gif動畫圖檔,并讓大家搜一個畫心形圖的網頁,繪圖的最終結果如下。

imwrite函數 matlab_使用MATLAB建立gif動畫詳解

下面是該網頁給出的繪圖代碼 ( 這裡稍作修定,去除了複數報警等 ) , 在欣賞圖形之餘,順序了解一下幾個繪圖指令。 % matlab動态心形曲線(儲存GIF格式) clear; close all;clc; a=15; x=-2:0.01:2; for ilp=1:150     str_title = strcat('\color{red}a=',num2str(a));     y = abs(x).^(2/3)+(0.9*sqrt((3.3-x.^2))).*sin(a*pi*x);     y=real(y); % 修訂     a=ilp/10;     figure(ilp);set(gcf,'position',[100,200,800,600],'color','w');     plot(x,y,'r','LineWidth',3);hold on;     title('\color{red}f(x)=x^2^/^3+e/3*(π-x^2)^1^/^2*sin(a*π*x)','fontsize',20,...         'FontName','Georgia','fontangle','italic');     text(-0.2,2.3,str_title,'FontName','Georgia','FontSize',20,'fontangle','italic');     xlim([-2,2]);ylim([-1.5,2.5]);     frame = getframe(gcf);     im = frame2im(frame);     [I,map] = rgb2ind(im,256);     if ilp==1         imwrite(I,map,'心形圖.gif','gif','Loopcount',inf,'DelayTime',0.05);     else         imwrite(I,map,'心形圖.gif','gif','WriteMode','append','DelayTime',0.05);     end     close(figure(ilp)); end

這其中,主要用到以下4個函數:

1. getframe函數

該函數用來捕獲坐标區或圖窗作為影片幀。使用格式

F=getframe

它捕獲顯示在螢幕上的目前坐标區作為影片幀。F是一個包含圖像資料的結構體。getframe按照螢幕上顯示的大小捕獲這些坐标區,它并不捕獲坐标區輪廓外部的刻度标簽或其他内容。

2. frame2im函數

它與getframe函數屬于一類,它傳回與影片幀關聯的圖像資料。

3. rgb2ind函數

從函數名的構成上看,rgb2ind,就是将RGB圖像轉換(2同to音)為索引(index)圖像。

gif實際上是多圖疊加而成,各圖展示時間有延遲,是以看上去是動态的。要将多個圖像儲存到一個gif檔案中,但因為gif檔案不支援三維資料,是以應調用rgb2ind,使用顔色圖map将圖像中的RGB資料轉換為索引圖像。

4. imwrite函數

imwrite将GIF檔案寫入您的目前檔案夾。

在imwrite的參數中,除了要寫出的圖像資料、圖像檔案名稱外,還有三個非常重要的參數:

4.1參數LoopCount

LoopCount用來設定動畫連續循環的次數。循環次數可取[0,65535]範圍内的整數或Inf值,如果指定0,動畫将播放一次,但某些Microsoft應用程式會将值0的含義解釋為根本不進行循環;如果指定值1,動畫将播放兩次,以此類推;取Inf值可使動畫連續循環。

4.2參數WriteMode

因為Gif圖像是多圖疊加,是以需要将多個圖像添加到第一個圖像中,而使用'WriteMode','append'這種名稱-值,可将後續生成的圖像疊加到前邊的圖像中。

4.3參數DelayTime

參數DelayTime指定各個圖像的顯示延遲時間,正是因為這種在每個圖像顯示之間指定了時滞,才看上去是動态的,上邊的代碼中設定了0.05秒。

imwrite函數 matlab_使用MATLAB建立gif動畫詳解

參考網頁:https://blog.csdn.net/ywsydwsbn/article/details/106076745

另外,2020A的imwrite函數的幫助檔案中,有類似介紹,可參閱。