文章目录
- 1 前言
- 2 Demo
- Demo 1 - 不使用函数
- Demo 2 - 使用函数
1 前言
在PPT展示或者博客创作中,有时需要插入动态图如GIF,来演示算法效果或者结果。在MATLAB中,可以通过一些代码,将绘图plot转化为动态的GIF。
其大致方法为,写一个循环,每个循环为一个帧,绘制该帧的内容,将此时figure的内容转化为一帧图像,定义两帧的间隔,然后添加到GIF中(第一帧和其他帧的处理方式不一样,详见代码)。
如果想将GIF插入到CSDN博客中,只需要点击工具栏中的图片,然后添加即可。
效果如下:
2 Demo
这里提供两个demo。
Demo 1 - 不使用函数
需要一个文件,create_gif_demo_1.m
需要修改的只有两处:
- 文件名。这里文件名为
animation.gif
,注意不要漏了后缀。这样会在当前目录下,生成GIF文件。 - 帧间隔。这里设置的时间间隔为0.1s,可以根据需要修改。
clear all
clc
% Define the time steps for your animation
timeSteps = 0:0.1:2*pi;
% Create a figure handle
figure;
% Loop through each time step
for i = 1:length(timeSteps)
% Generate your plot for each time step
x = linspace(0, 2*pi, 100);
y = sin(x + timeSteps(i));
% Plot customization
plot(x, y, 'LineWidth', 2);
title('Sinusoidal Wave Animation');
xlabel('X-axis');
ylabel('Y-axis');
% Capture the current frame
frame = getframe(gcf);
% Convert the frame to an image matrix
img = frame2im(frame);
[A,map] = rgb2ind(img,256);
% Save the image as a GIF (adjust filename as needed)
if i == 1
imwrite(A,map, 'animation.gif', 'gif', 'Loopcount', inf, 'DelayTime', 0.1);
else
imwrite(A,map, 'animation.gif', 'gif', 'WriteMode', 'append', 'DelayTime', 0.1);
end
% Pause to create a smooth animation
pause(0.1);% For real-time viewing only, can be removed
end
% Display a message indicating successful GIF creation
disp('GIF animation created successfully.');
Demo 2 - 使用函数
需要两个文件(放在同一目录下):create_gif.m
和create_gif_demo_2.m
不同于demo 1的地方在于,这里把和GIF相关的代码封装进一个函数里。
这样只需要传入参数:是否为第一帧的flag,帧与帧的时间间隔,GIF文件名称。
function [] = create_gif(flag,delay_time,name_of_the_file)
%
% Capture the current frame
frame = getframe(gcf);
% Convert the frame to an image matrix
img = frame2im(frame);
[A,map] = rgb2ind(img,256);
% Save the image as a GIF (adjust filename as needed)
if flag == 1 % flag == 1 means it's the first frame
imwrite(A,map, name_of_the_file, 'gif', 'Loopcount', inf, 'DelayTime', delay_time);
else
imwrite(A,map, name_of_the_file, 'gif', 'WriteMode', 'append', 'DelayTime', delay_time);
end
end
clear all
clc
delay = 0.1; % delay between frames, 0.1s
file_name = 'gif_demo_2.gif'; % file name, careful about the .gif suffix
% Define the time steps for your animation
timeSteps = 0:0.1:2*pi;
% Create a figure handle
figure;
% Loop through each time step
for i = 1:length(timeSteps)
% Generate your plot for each time step
x = linspace(0, 2*pi, 100);
y = sin(x + timeSteps(i));
% Plot customization
plot(x, y, 'LineWidth', 2);
title('Sinusoidal Wave Animation');
xlabel('X-axis');
ylabel('Y-axis');
% Create GIF
flag = i; % flag to indicate whether it's the first frame
create_gif(flag, delay, file_name);
% Pause to create a smooth animation
pause(0.1);% For real-time viewing only, can be removed
end
% Display a message indicating successful GIF creation
disp('GIF animation created successfully.');