This example animates the vibration of a membrane, captures a series of screen shots, and saves the animation as a GIF image file. The animated GIF is also embedded in an HTML page via the published M-File.
Robert Bemis (2021). Animated GIF (https://www.mathworks.com/matlabcentral/fileexchange/21944-animated-gif), MATLAB Central File Exchange. Retrieved .
Causes the following Error:
Unable to perform assignment because the size of the left side is 344-by-435 and the size of the right side is 344-by-434.
Error in AnimatedGif (line 24)
im(:,:,1,k) = rgb2ind(f.cdata,map,'nodither');
Tim: I had the same ghost image problem; I fixed it by adding 'set(gcf, 'Renderer', 'zbuffer') around line 18 (after 'set(gca, 'nextplot' ...). I also changed the background color to white because the default was grey by using 'set(gcf, 'Color', [1 1 1])'. Hope that helps.
I cannot get the code to run using Matlab version 18.104.22.1685 (R2011a) but it will run using Matlab version 22.214.171.1249 (R2010a). I have the Image Processing Toolbox for the 2011 version but not the 2010 version. Does anyone have the “fix” for newer version of Matlab? All I get is a single image with a “ghost” of what is behind the figure on the screen.
If I use the attached GIF in powerpoint, it does play. If I rerun the code it yields a gif with a single frame. Are any additional inputs necessary?
Very good, thanks.
I am trying to do it with imagesc or imshow, however my gif file doesn't have all the colours in my image, I tried it with a 3D version of the shepp logan phantom, which odly has a minimum value of -5.551115123125783e-017 and a max of 1 and it's a double.
Is there perhaps some setting that could fix this? It plots fine... It just doesn't write all the colours entirely, only like one gray & black
Am I right in thinking that 'DelayTime',0 means that the speed of the animation is only limited by the viewer's hardware? (In other words, in a years to come, those peaks might be dancing too fast to see!)
Oddly, the documentation for imwrite doesn't say what the default is for this; looking at imagesci/private/writegif.m it appears that it's 0.5 seconds, which seems very long for most animations (as opposed to step-throughs of multiple plots). I would have thought that something like 1/24 (a common choice of frame-rate I believe) would be a reasonable choice. Though writegif rounds to the nearest 100th of a second, so this would actually be 0.04s. Anyway, just a thought.
It would be nice if I could just feed an argument into a function, but the code is effective and easy to edit.
Luca, see the help for GETFRAME. The optional arguments are what you need. :)
That's almost what I was looking for..
I just wonder how can I display also xlabel, ylabel
and title, and the values on the axis.
Thank you very much by the way :)
Anders, interesting suggestion. Thanks!
Nice example! You can add anti-aliasing too if you download the Myaa tool and replace every
f = getframe;
h = myaa;
f = getframe;
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!