Я думаю, что нашел проблему:
f = handles.axes_threeDOF
получает дескриптор осей вместо того, чтобы получить дескриптор фигуры .
Поскольку я не знаю имени вашей фигуры, я не могу дать идеальное решение.
Вы можете попробовать следующие варианты:
1.Найдите имя цифра и используйте что-то вроде: f = handles.figure_threeDOF;
2. Используйте f = gcf();
, предполагая, что есть только одна цифра.
3. Используйте f = handles.axes_threeDOF.Parent;
, предполагая, что фигура является "Родителем"осей.
Обновление:
После im = frame2im(frame);
необходимо обрезать соответствующую часть изображения:
Что-то вроде: im = im(36:884, 928:1800, :);
Есть более надежное решение, чем использование фиксированных индексов, но оно требует некоторых знаний о внутренней структуре фигуры.
Вот код, который воспроизводит проблему (вместо дескриптора фигуры f
получает дескриптор оси):
numpoints = 500;
x = linspace(0,4*pi,numpoints);
y = square(x);
y2 = 3 +square(x+1);
f = figure;
h = animatedline('Color','b','LineWidth',2);
h2 = animatedline('Color','r','LineWidth',2);
grid on;
axis([0,12,-3,+6])
for k = 1:numpoints
addpoints(h,x(k),y(k))
addpoints(h2,x(k),y2(k))
drawnow
%%% Test %%%
%The following code demonstrates the problem.
%f = gca(), returns a handle to the axes, instead of the figure.
%You should remove the following line for the code to work properly...
f = gca();
%%% Test %%%
% Capture the plot as an image
frame = getframe(f);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
% Write to the GIF File
if k == 1
imwrite(imind,cm,'test.gif','gif', 'Loopcount',inf);
else
imwrite(imind,cm,'test.gif','gif','WriteMode','append');
end
end
Результат правильного кода (без f = gca();
):
Результат неправильный код (с f = gca();
) - получение дескриптора осей вместо дескриптора фигуры: