2010-09-21 19 views
8

Lors de l'enregistrement d'une figure, quelle est la fonction de Matlab? Par exemple, lorsqu'un utilisateur sélectionne Fichier> Enregistrer sous ... puis sélectionne .png ou un autre format d'image, que se passe-t-il dans les coulisses?Dans matlab, comment enregistrer une image comme une image de la même manière que "Enregistrer sous ..." dans la fenêtre graphique?

Je demande parce que j'essaye d'automatiser la sauvegarde, mais quand j'utilise saveas ou print, l'image résultante est vraiment pixellisée. Cependant, l'image semble vraiment bonne quand je sauvegarde la figure en utilisant la méthode décrite ci-dessus.

Quelle méthode dois-je utiliser pour enregistrer ma figure à partir de la ligne de commande? La méthode réelle que la fenêtre de chiffre utilise fonctionnerait, mais si vous avez de meilleures solutions, je l'approuverais!

Répondre

9

Le rappel pour l'élément de menu "Enregistrer sous ..." invoque la fonction FILEMENUFCN avec le premier argument d'entrée étant le handle de la figure le menu est dans et le deuxième argument d'entrée étant la chaîne 'FileSaveAs'. Si vous avez la poignée de la figure stockée dans la hFigure variable, la commande suivante doit être équivalent à cliquer sur « Enregistrer sous ... » élément de menu dans cette fenêtre figure:

>> filemenufcn(hFigure,'FileSaveAs'); 


Quelques notes. ..

  • La fonction FILEMENUFCN est seulement partiellement documenté. Vous pouvez faire help filemenufcn dans la fenêtre de commande, mais il n'y a aucune entrée dans la documentation en ligne. Dans Matlab 2009a, la fonction se trouve dans le dossier suivant:

    C:\Program Files\MATLAB\R2009a\toolbox\matlab\uitools\filemenufcn.m 
    

    En regardant à travers le code de fonction, il semble qu'elle appelle en fin de compte, soit la fonction SAVEAS pour les fichiers .fig ou la fonction HGEXPORT (avec des arguments d'entrée supplémentaires) pour les autres types de fichiers.

  • J'ai été capable de rechercher le rappel de l'élément de menu "Enregistrer sous ..." en cherchant parmi les enfants de la fenêtre graphique et ses menus. Vous pouvez le faire vous-même en réglant le root property 'ShowHiddenHandles' sur 'on', puis en passant par le 'Children' properties de la fenêtre graphique et ses menus à l'aide de la commande GET. Une alternative consiste à utiliser la commande FINDALL, en supposant que vous connaissiez certaines propriétés des objets que vous recherchez. Par exemple, cela se trouve la poignée dans le menu « Fichier » pour la fenêtre de la figure actuelle:

    >> hFileMenu = findall(gcf,'Label','&File'); 
    

    Et cela trouver la poignée « Enregistrer sous ..."Élément de menu et afficher son rappel:

    >> hSaveAs = findall(hFileMenu,'Label','Save &As...'); 
    >> get(hSaveAs,'Callback') 
    ans = 
    filemenufcn(gcbf,'FileSaveAs') 
    
+1

Merci, vous me mettre sur la bonne voie, je fini par utiliser ce: http://www.mathworks.com/matlabcentral/newsreader/view_thread/239960 Réglage options.Format = '.png' Enregistré sans beaucoup de pixellisation – tylerthemiler

+0

@tylerthemiler:. Oui, il semble que la fonction [HGEXPORT] (http://www.mathworks.com/help/techdoc /ref/hgexport.html) est finalement appelé (avec des arguments d'entrée supplémentaires comme indiqué dans ce thread de groupe de discussion) lors de l'enregistrement des images PNG – gnovice

+1

Merci! QOTSA bascule btw. – tylerthemiler

2

Je ne sais pas pour vous, mais pour moi l'image enregistrée est belle.

Exemple de code:

... create some figure ... 
saveas(gcf, 'some_figure.png'); 

Pour définir une utilisation de la résolution spécifiée par l'utilisateur:

print(gcf,'some_figure','-dpng','-rSOMENUMBER') 

où SOMENUMBERis un paramètre utilisé pour la résolution. La résolution finale est (SOMENUMBER * 8) x (SOMENUMBER * 6)