【发布时间】:2019-02-10 07:08:40
【问题描述】:
考虑以下 MCVE:
B = 50 - randi(100,100,100,4);
% Show each of the 4 layers of A for 0.50 seconds each, and save image frames:
fig=figure();
for idx = 1:size(B,3)
imagesc( B(:,:,idx) ); title(num2str(idx)); caxis([-50 50]); drawnow;
frame = getframe(fig);
img{idx} = frame2im(frame);
pause(0.50);
end
% Write a .gif file, show each image 1 second in infinite loop.
filename = 'whatsgoingon.gif'; dlyt = 1;
for idx=1:length(img)
[A,map]=rgb2ind(img{idx},256);
if idx==1; imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',dlyt);
else; imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',dlyt);
end
end
每张图片都显示了立方体B 的一层。我写了一些代码来制作一个 .gif 文件,以便于共享。我遇到的问题是:每次打开 .gif 文件时,它都会在显示的第一个循环中跳过第二帧(即与 B(:,:,2) 关联的帧)。本质上,.gif 按时间顺序显示以下帧:
1、3、4、1、2、3、4、1、2、3、4等
这不是一个大问题,只是在我与他人分享一些结果时有点尴尬。我似乎找不到任何关于类似问题的主题(无论是在此处还是在 Matlab 的网站上),所以我很想知道您在使用上述代码制作 gif 时是否看到相同的问题,如果您愿意知道它的来源。
仅供参考:我在 Windows 机器上使用 Matlab R2018a。
编辑:这是我创建的示例图像:
【问题讨论】:
-
你能分享它创建的 GIF 吗?
-
当然,我加了一个。可能需要刷新页面才能看到我指的是什么,因为它只发生在显示的第一个循环中。
-
用 ImageMagick 分析你的 GIF 文件显示它有 4 帧,每帧有 100 的延迟。GIF 中延迟的默认单位是 "厘秒”,因此四个帧中的每一个都应显示 1 秒。
-
感谢您的帮助,马克。我想这意味着问题出在 Windows 用于打开 GIF 的本机应用程序中。
-
不确定它的真正含义 :-) 尝试在 Firefox、Safari 和 Chrome 中查看文件,看看它在那里的样子。在我的 Mac 上看起来不错。在动画 GIF 方面,Windows 的历史确实很差 - Internet Explorer 6 一次忽略了 6 厘秒以下的延迟,如果任何单个帧的大小与第一个帧的大小不同,IE8 就会崩溃。
标签: matlab animated-gif