【发布时间】:2016-10-22 05:36:39
【问题描述】:
相关信息:MATLAB R2015b、Mac
我目前正在尝试从我拍摄的一系列数据集(txt 文件)中编写一个 GIF。我编写 GIF 文件没有问题,但是,当播放(在 PowerPoint 中)或在 OS X Finder 中预览时,轴标签的颜色会发生变化。除了颜色变化之外,我还收到以下警告:
警告:图像数据包含超出范围的值。超出范围的值将被赋予最接近的有效值。
目前,我抓取目录中的所有数据文件,绘制它们,抓取每一帧,然后将它们放入 GIF 中。这是我的代码:
%Create MATLAB movie from plots
clearvars
%addpath('C:\Users\ucmuser\Documents\MATLAB')
filename='cooldown_movie.gif';
ext_in='txt';
[~,listing]=f_search(ext_in);
[r,~]=size(listing);
listing=natsortfiles(listing);
F=figure;
%r=20 is used for quick debugging (original is 460 files).
r=20;
% y=linspace(1,2*pi,100);
% x=linspace(1,100,100);
%C(1,1,1,r)=0;
for i=1:r
A=dlmread(listing{i});
listing{i}=strrep(listing{i},'_','\_');
x=A(1,:); %X Array
y=A(2,:); %Y Array
plot(x./1E9,y.*1E3,'-','LineWidth',1.2,...
'Color',[0.8500 0.3250 0.0980]);
grid off
xlabel('Frequency (GHz)','FontSize',18,'FontWeight','bold')
ylabel('Voltage (mV)','FontSize',18,'FontWeight','bold')
title('Cooldown Movie','FontSize',24,'FontWeight','bold')
G(i)=getframe(gcf);
drawnow
frame = G(i);
% im = frame2im(frame);
[C(:,:,1,i),map] = rgb2ind(frame.cdata,256,'nodither');
% if r == 1;
% imwrite(C,map,filename,'gif','LoopCount',Inf,'DelayTime',0);
% else
% imwrite(C,map,filename,'gif','WriteMode','append','DelayTime',0);
% end
end
imwrite(C,map,filename,'gif','LoopCount',Inf,'DelayTime',0);
示例图像如下所示。坐标轴标签的颜色会发生变化。如果我打开网格,随着网格灰度强度的变化,效果会更加明显。我试过设置限制,效果仍然存在。
【问题讨论】:
-
这可能是由于 gif 的处理方法。您是否考虑过手动指定
xlim和ylim,以便轴不会不断变化。这应该会清理您的视频。 -
是的,我试过设置限制,但没有多大帮助。
-
如果我设置了轴限制,我会得到一个奇怪的背景闪烁颜色效果。
-
我不会使用 MATLAB 写入 GIF,而是让实际的 MATLAB 图形动画并使用像 LICEcap 这样的捕获工具为您完成。尝试这样做,而不是使用 MATLAB 语法将 GIF 写入文件,看看它是如何为您工作的。如果有帮助,我从未编写过 MATLAB 代码来从多个 MATLAB 绘图创建动画 GIF。我只是让 LICEcap 为我捕捉图形窗口。例如,请参阅这篇文章:stackoverflow.com/questions/29948697/…
-
是的,有那个选项。缺点是 LICEcap 以 MATLAB 绘制图形的速度记录,这恰好比 GIF 文件慢得多,图像之间的延迟为 0 秒。我想我仍然可以减少 LICEcap 中的帧数以提高录制后的播放速度。
标签: matlab matplotlib colors gif axes