Recording a graphics element to a video format

조회 수: 5 (최근 30일)
Owen
Owen 2025년 2월 20일
답변: Epsilon 2025년 2월 25일
Hello,
I'm having some trouble finding a method to save this graphics animation to a video file. The initial 'array' is a 1200x8 matrix that I'm simply performing interpolation on between points. A .gif file would be the most useful format, but I haven't been successful saving the graphics element 'p' to this file type. Any help is appreciated.
Thanks.
array=-ppdtrace;
array_zeros=[zeros(size(array,1),1) array];
array_zeros=cat(2, zeros(size(array,1),1), array);
x = (0:8)';
xx=0:0.05:8;
yy=makima(x,array_zeros(1,:),xx);
figure(1)
p = plot(x,array_zeros(1,:)',xx,yy);
axis([0 9 -0.85 0]);
for k=2:1200
pause(0.05)
yy=makima(x,array_zeros(k,:),xx);
set(p, 'XData', xx, 'YData', yy);
end

답변 (1개)

Epsilon
Epsilon 2025년 2월 25일
Hi Owen,
To save the generated images into a gif, both ‘exportgraphics’ and imwrite’ functions can be used. The ‘imwrite’ function can be used to write an image to a file location and append the subsequent images to create a gif with a controlled delay. Whereas the ‘exportgraphics’ function (in release R2022a and later) can directly save the graphics object into a gif file.
Attaching a sample code with 12 frames using both the functions:
array = rand(12, 8) * 2 - 1;
array_zeros = [zeros(size(array, 1), 1), array, zeros(size(array, 1), 1)];
x = (0:9)';
xx = 0:0.05:9;
yy = makima(x, array_zeros(1, :), xx);
figure(1)
p = plot(x, array_zeros(1, :)', xx, yy);
axis([0 9 -1 1]);
filename = 'animation.gif';
%Using imwrite function
for k = 1:12
pause(0.05)
yy = makima(x, array_zeros(k, :), xx);
set(p, 'XData', xx, 'YData', yy);
% Capture the current frame
frame = getframe(gcf);
img = frame2im(frame);
[imind, cm] = rgb2ind(img, 256);
% Write to the GIF file
if k == 1
% For the first frame, create the GIF file
imwrite(imind, cm, filename, 'gif', 'Loopcount', inf, 'DelayTime', 0.05);
else
% For subsequent frames, append to the GIF file
imwrite(imind, cm, filename, 'gif', 'WriteMode', 'append', 'DelayTime', 0.05);
end
end
%Using exportgraphics function
for k = 1:12
pause(0.05)
yy = makima(x, array_zeros(k, :), xx);
set(p, 'XData', xx, 'YData', yy);
exportgraphics(gcf,"animation2.gif","Append",true);
end
For further reference on both the functions please refer to the documentation links below:
Hope it helps.

카테고리

Help CenterFile Exchange에서 Printing and Saving에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by