Best way to export image / animation from GUI, including colorbar

10 visualizaciones (últimos 30 días)
William Thielicke
William Thielicke el 12 de Nov. de 2023
Comentada: Viktor Janzen el 9 de Abr. de 2024
Hi, am am trying to export a graphics file from a uifigure. The plot has several layers and elements, and also features a colorbar outside of the axes. I tried getframe(gcf) and getframe(gca), both are not suitable (one does not include the colorbar, the other does include the whole uifigure, see attachments).
In the past, I was copying all elements from the uifigure to a new, invisible figure using copyobj, then using getframe(gca) to get a clean image that includes the colorbar. But this involves a lot of extra code to deal with all the details, and this is prone to errors I think.
I wonder if there are good ways to achieve this?
My GUI does not only display still images, but also image sequences. Hence, I additionally want to write videofiles directly from this Matlab GUI. So I think exportfig is not really an option?
Thanks for your input!
  2 comentarios
Mario Malic
Mario Malic el 13 de Nov. de 2023
I would suggest to output an image, open it and remove the portion which you don't want to be in the picture. By this, I mean to "crop" the part you want to save.
William Thielicke
William Thielicke el 13 de Nov. de 2023
Hi, this is something that I also consider, but it involves an additional file read and file write, which is slow for animations....

Iniciar sesión para comentar.

Respuestas (1)

William Thielicke
William Thielicke el 13 de Nov. de 2023
I think I am close to a good solution:
The function that does all the plotting / imagesc / scatter in the uifigure got an additional input argument: The target axis. Now I can select if the graphics are plotted in the uifigure, or in a new, hidden figure. This hidden figure is a regular figure without ui elements. Therefore I can export it in a simple way with getframe(target_axis).
  2 comentarios
William Thielicke
William Thielicke el 26 de Nov. de 2023
Unfortunately, the figure cannot be hidden, because then all of Matlabs plotting doesn't work properly. WHAT A MESS. Incredible that I am spending days on finding out how to plot figures properly....
Viktor Janzen
Viktor Janzen el 9 de Abr. de 2024
I have a similar problem. Because I am offering my uifigure within a webapp, it is not possible to open a second figure (visible or hidden), beacuse Web Apps do not support multi-window application.
I had a solution with getframe. But the big problem with getframe is that it makes a snapshot from the whle uiffigure, considering also all hidden UI components and then reduces the frame to the axes, which is the input argument. For my animation it takes about 4 seconds per frame.
I tested with deleting many hidden UI components. Then it takes half of the time.
You can also put the uifigure as input argument. Then a video from the whole app is made.

Iniciar sesión para comentar.

Categorías

Más información sobre Migrate GUIDE Apps en Help Center y File Exchange.

Productos


Versión

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by