前言
接上篇文章,链接: matlab 绘制三阶魔方-动态变化,需要将魔方的动态变化转换为视频或动图表示出来,因此写了代码,目前还是小白,有不对的地方欢迎指出,大家一起学习。
导出视频
首先进行初始化:
aviobj=VideoWriter('example.avi');
aviobj.FrameRate=30;%set FrameRate before open it
open(aviobj);
j=1;
在进行魔方动态显示时的循环中,将图片提取出来,存入video中
MOV =getframe(gcf);
writeVideo(aviobj, MOV);
j=j+1;
最后,需要在循环外关闭 aviobj 。下面是执行魔方操作和显示魔方实时位置的代码,showcube(H, axisBlock, concerBlock, edgeBlock, …
blockVertices, blockFace, color, colorAlpha) 为显示图像操作,提取该图像存入预先建立的视频中。
for k = 1:optNum
for i =1:9
% 执行
[blockIdx, axisBlock, concerBlock, edgeBlock] = operation(optIdx(k), blockIdx, axisBlock, concerBlock, edgeBlock);
% 显示
showcube(H, axisBlock, concerBlock, edgeBlock, ...
blockVertices, blockFace, color, colorAlpha)
%转为视频
MOV =getframe(gcf);
writeVideo(aviobj, MOV);
j=j+1;
pause(0.1)
end
end
close(aviobj)
其他情况时,可以在自己的图像绘制的循环中使用,将Figure 图像转换为视频输出。
导出GIF
首先,初始化
pic_num=1;
同样在图像绘制的循环中加入代码:
F=getframe(gcf);
I=frame2im(F);
[I,map]=rgb2ind(I,256);
if pic_num==1
imwrite(I,map,'test.gif','gif','Loopcount',inf,'DelayTime',0.2);
elseif mod(pic_num,3)==1
imwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.2);
end
pic_num = pic_num + 1;
最终代码为:
for k = 1:optNum
for i =1:9
% 执行
[blockIdx, axisBlock, concerBlock, edgeBlock] = operation(optIdx(k), blockIdx, axisBlock, concerBlock, edgeBlock);
% 显示
showcube(H, axisBlock, concerBlock, edgeBlock, ...
blockVertices, blockFace, color, colorAlpha)
% MOV =getframe(gcf);
% writeVideo(aviobj, MOV);
% j=j+1;
pause(0.1)
F=getframe(gcf);
I=frame2im(F);
[I,map]=rgb2ind(I,256);
if pic_num==1
imwrite(I,map,'test.gif','gif','Loopcount',inf,'DelayTime',0.2);
elseif mod(pic_num,3)==1
imwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.2);
end
pic_num = pic_num + 1;
end
end
%
% close(aviobj)
就可以实现Matlab 导出视频和GIF动图了。