使用matlab制作一個n幀的gif動畫 示意程序
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
Step1:捕獲當前圖窗並生成索引圖像
frame=getframe(gcf)是捕獲當前圖窗作為影片幀,frame是一個結構體,包含cdata和colormap
cdata是一個存放真彩色圖像數據的矩陣,大小為M*N*3
當cdata存放真彩色圖像時,colormap=[]
img=frame2im(frame)是將捕獲的影片幀轉換為圖像數據,img為真彩色圖像,即從結構體frame中提取出的cdata
因為 不支持將真彩圖像寫入GIF文件,所以應調用 rgb2ind, 將圖像中的 RGB 真彩圖像數據轉換為索引圖像
[X,cmap] = rgb2ind(RGB,Q) 使用具有 Q 種量化顏色的最小方差量化法並加入抖動,將 RGB 圖像轉換為索引圖像 X,關聯顏色圖為 cmap。
索引圖象X矩陣大小為M*N
Step2:調用imwrite函數將索引圖像寫入gif文件中
語法:imwrite(索引圖象,索引圖象顏色圖,'gif文件名','gif',名稱-值對組參數)
名稱-值對組參數
指定可選的、以逗號分隔的 Name,Value 對組參數。Name 為參數名稱,Value 為對應的值。Name 必須放在引號中。您可采用任意順序指定多個名稱-值對組參數
以下是本程序使用到的名稱-值對組參數
'DelayTime' - 顯示下一個圖像之前的時滯
顯示下一個圖像之前的時滯(秒),指定為逗號分隔的對組,包含 'DelayTime' 和范圍 [0,655] 內的標量值。0 的值以硬件允許的最快速度顯示圖像
'LoopCount' - 重復動畫的次數
重復動畫的次數,指定為以逗號分隔的對組,包含 'LoopCount' 和 [0,65535] 范圍內的整數或 Inf 值。如果指定 0,動畫將播放一次。如果指定值 1,動畫將播放兩次,以此類推。Inf 的 LoopCount 值可使動畫連續循環
'WriteMode' - 寫入模式
寫入模式,指定為逗號分隔的對組,包含 'WriteMode' 和 'overwrite' 或 'append'。在 overwrite 模式下,imwrite 覆蓋現有文件 filename。在 append 模式下,imwrite 會向現有文件添加單個幀。
相關知識:
MATLAB有三種基本的圖像類型:
Truecolor(真彩色圖像)——數碼相機的格式,廣泛用於計算機圖形。
Indexed (索引圖象)和 scaled indexed (比例索引圖象)——經常用來顯示科學或者工程數據
真彩色圖像
在這種格式的圖里,每一個像素由三個數字表示:紅,綠,藍,整個圖形由一個M-N-3的三維矩陣表達。圖形顯示函數和圖形處理工具箱將這種矩陣視為一個truecolor圖形
矩陣值直接指定了每一個像素的顏色。通過這種表達方式你可以很大程度上控制顏色顯示,但是對於工程應用來說它並不是最適合的一種圖形格式。
索引圖像
為了解決彩色圖像消耗空間大的問題,一般應用於色彩構成比較簡單的場景,索引圖像包括一個數據矩陣X,一個顏色映像矩陣Map。像素顏色由數據矩陣X作為索引指向矩陣Map進行索引。