Удаление фона предыдущих кадров из Matlab GIF - PullRequest
1 голос
/ 09 января 2020

У меня есть следующий код Matlab для GIF, но я не могу заставить его не показывать каждый кадр (т. Е. После появления кадра он не исчезает в течение GIF). Я хочу, чтобы в каждом кадре не было содержимого предыдущего кадра.

dt = 0.05
filename = 'test.gif'; 
figure;
for t = 0:pi/16:2*pi
    line([1,2],[3+0.5*sin(t),3+0.5*sin(t)], 'linewidth',5)
    line([1,2],[1-0.5*sin(t),1-0.5*sin(t)], 'linewidth',5)
    xlim([0 3]) 
    ylim([0 4])
    set(gca,'XTickLabel',[], 'YTickLabel', [], 'ZTickLabel', [], 'visible', 'off')
    set(gcf,'color','w');
    im = frame2im(getframe(1));
    [imind,cm] = rgb2ind(im,256);

    if t == 0;
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf,'DelayTime',dt);
    else
        imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',dt);

    end
end 

Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 09 января 2020

Используйте clf, чтобы очистить содержимое рисунка перед рисованием следующего кадра.

Вы должны поместить его прямо в начало l oop:

dt = 0.05
filename = 'test.gif'; 
figure;
for t = 0:pi/16:2*pi
    clf; % clears the figure to have an empty frame
    line([1,2],[3+0.5*sin(t),3+0.5*sin(t)], 'linewidth',5)
    line([1,2],[1-0.5*sin(t),1-0.5*sin(t)], 'linewidth',5)
    xlim([0 3]) 
    ylim([0 4])

    set(gca,'XTickLabel',[], 'YTickLabel', [], 'ZTickLabel', [], 'visible', 'off')
    set(gcf,'color','w');
    im = frame2im(getframe(1));
    [imind,cm] = rgb2ind(im,256);

    if t == 0;
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf,'DelayTime',dt);
    else
        imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',dt);

    end
end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...