2

因此,当我浏览谷歌关于如何从一系列 .fig 文件创建 .gif 动画的问题时,我偶然发现了一个使用 .sdf 文件的程序,我试图重写程序以适用于我的 .fig 文件

clear all;
close all;

dynam = 156;
gif_fps = 24; 
video_filename = 'A.gif';
fh = figure(1);

for i = 1:dynam
    F_data = getdata(['F' num2str(i,'_%03i', '.fig');
    imagesc(F_data);
    drawnow;
    frame = getframe(fh);
    im = frame2im(frame);
    [imind,cm] = rgb2ind(im,256);
    if a == 0;
        imwrite(imind,cm,video_filename,'gif', 'Loopcount',inf);
    else
        imwrite(imind,cm,video_filename,'gif','WriteMode','append','DelayTime',1/gif_fps);
    end
end

所以它弹出一个错误说

???     frame = getframe(fh);
                   |
Error: The expression to the left of the equals sign is not a valid target for an assignment.

我不明白为什么会这样,而且我还注意到 Matlab 没有绘制无花果,弹出我们的图是完全空白的。

4

1 回答 1

2

错误来自一个错字。线

F_data = getdata(['F' num2str(i,'_%03i', '.fig'); %bracket missing at the end

应该读

F_data = getdata(['F' num2str(i,'_%03i', '.fig']);

没有括号,Matlab 看到

['F' num2str(i,'_%03i', '.fig');
imagesc(F_data);
drawnow;
frame 

作为单个字母串。因此,代码的逻辑是a = b = c,matlab 无法解释这一点。

为了防止此类错误,matlab 及其编辑器提供了一些不错的着色方案,以深红色突出显示开头字符串后面的文本',并在使用结束字符串时将整个字符串变为紫色'。如果您看到一些跨越多行的红色字符,则表明存在潜在问题。不幸的是,括号没有这样的行为......


另外,打开数字本身怎么样?您将看到每个图形是否渲染良好(没有空白)并且能够捕获帧。

for i = 1:dynam

    %open, get the frame from and close the figure 
    fh_tmp = open(['F' num2str(i,'_%03i', '.fig']) 
    frame = getframe(fh_tmp);
    close(fh_tmp);

    im = frame2im(frame);
    ...

我仍然很难找到getdata来自哪里。

于 2013-08-23T12:49:53.417 回答