gui2bitmap

génère une image bitmap d'une fenêtre ou interface graphique, incluant les composants interactifs voire le cadre de la fenêtre.

Syntaxes

gui2bitmap(idFig, filename)
gui2bitmap(idFig, filename, withBorders)
gui2bitmap("setMenu", parentHandle)
gui2bitmap("setBorders", borders)
gui2bitmap("setScale", scale)

Arguments

idFig
Identifiant graphique de la fenêtre dont on souhaite obtenir une image. La fenêtre doit obligatoirement apparaître à l'écran (traitement hors écran impossible), et ne doit être amarrée à aucune autre interface graphique (bureau Scilab compris).
filename
Texte : chemin et nom du fichier image attendu à créer. L'extension du nom déterline l'encodage de l'image : seuls les encodages .png .jpg .gif et .bmp are accepted. Si le dossier correspondant n'existe pas, il est créé. Les chemins constants prédéfinis TMPDIR, SCI, SCIHOME, home... peuvent être utilisés en tête de filename.
withBorders
Booléen unique (%F par défaut) : utiliser %T pour inclure le cadre de la fenêtre dans l'image produite, incluant le barre de titre général, la barre des menus, la barre des outils, la barre de statut en pied de fenêtre, etc.
parentHandle
Identifiant du composant graphique sur lequel le menu de gui2bitmap doit être greffé. Les valeurs possibles sont :
  • get(0): le menu gui2bitmap menu est ajouté à la barre de menu de la console Scilab.
  • l'identifiant idFig d'une fenêtre graphique. le sous-menu gui2bitmap est alors ajouté au (1er) menu Fichier de la fenêtre.
    Avec Scilab 6, cela doit obligatoirement être effectué avant tout tracé graphique dans la fenêtre (dû au bug 16167).
  • l'identifiant idMenu d'un menu existant, auquel le sous-menu gui2bitmap sera greffé.
borders
vecteur booléen à 3 éléments [bord_gauche, bord_bas, bord_droit], indiquant les bordures de la fenêtre à inclure dans l'image, lorsque l'option withBorders est utilisée. Par défaut = [%T %T %T].
scale
Nombre décimal > 1 : échelle d'affichage à l'écran, en pourcents. Par défaut = 100. Autres réglages fréquents : 125%, 150%, ..

Description

gui2bitmap(…) prend une photo de la fenêtre graphique spécifiée et l'enregistre dans le fichier indiqué.

gui2bitmap(…) est une fonction Scilab autonome ne faisant appel à aucun logiel tiers à installer. Elle utilise uniquement la JVM distribuée avec Scilab. Elle vise à suppléer à xs2png(…), xs2jpg(…), xs2gif(…), et xs2bmp(…). En effet, contrairement à celles-ci, gui2bitmap(…)

La Machine Virtuelle Java JVM étant appelée, gui2bitmap() peut être utilisée en modes standard STD et console avancée NW de lancement de Scilab, mais pas en mode NWNI (batch) qui ne charge pas la JVM et exclut en particulier l'usage de toutes les fonctions graphiques.

gui2bitmap("setMenu", parentHandle)

ajoute un menu à la console, ou un sous-menu à la fenêtre graphique choisie (à son menu Fichier) ou à un menu existant, selon la valeur parentHandle fournie.

À l'entrée de gui2bitmap(), l'explorateur de fichiers s'ouvre dans le dossier de travail courant et demande à l'utilisateur de spécifier le dossier et le nom de fichier dans lesquels enregistrer l'image.

Lorsque le menu est ajouté à la console, gui2bitmap() est appliquée à la fenêtre graphique active, repérée par un clignotement avant d'appeler gui2bitmap().

Cette commande est ignorée en mode d'exécution NW.

gui2bitmap("setScale", scale)

enregistre en paramètre de configuration l'échelle d'affichage à l'écran. La valeur est enregistrée dans le fichier SCIHOME/gui2bitmap_preferences.xml et est prise en compte par gui2bitmap() pour tous les appels à gui2bitmap et sessions Scilab à suivre.

gui2bitmap("setBorders", borders)

indique quelles bordures de la fenêtre graphique doivent être incluses dans l'image lorsque gui2bitmap() est appelée avec l'option withBorders. Le vecteur booléen borders est enregistré comme paramètre de configuration dans le fichier SCIHOME/gui2bitmap_preferences.xml et est utilisé par gui2bitmap() pour tous ses appels et les sessions Scilab à suivre.

Ce réglage est utile en particulier lorsque les bordures sont transparentes. [%F %F %F] sera alors paramétré afin de les ignorer.

Aucune variable nommée File, Robot, ou Rectangle ne doit exister dans la session, ni au niveau d'appel de gui2bitmap(…) ni aux éventuels niveaux parents.

Exemples

// Génère une interface graphique ergonomique (démo)
exec("SCI/modules/gui/demos/uicontrol_plot3d.dem.sce",-1);
//
f = gcf();
f.axes_size = [650 400];
sleep(500)
figGUI = "TMPDIR/gui2bitmap/gui2bitmap.png";

// Export de la fenêtre en image bitmap (ici PNG)
gui2bitmap(f, figGUI, %t)   // avec le cadre de la fenêtre

// Regardons l'image produite
winopen(figGUI)
sleep(500)

// Et maintenant, sans le cadre de la fenêtre :
gui2bitmap(f, figGUI)
winopen(figGUI)

close(f);
rmdir(fileparts(figGUI));

.

Enfin, supprimons les bordures à gauche, en bas, et à droite, en conservant cependant le bandeau de tête, et la barre de statut en bas :

xdel(winsid())
exec("SCI/modules/gui/demos/uicontrol_plot3d.dem.sce",-1);
f = gcf();
f.axes_size = [650 400];
f.infobar_visible = "on";
figGUI = "TMPDIR/gui2bitmap/gui2bitmap.png";

gui2bitmap("setBorders", [%F %F %F])
gui2bitmap(gcf(), figGUI, %t);

// Image produite :
winopen(figGUI)

// Restauration de toutes les bordures :
gui2bitmap("setBorders", [%T %T %T])

Ajoutons un menu gui2bitmap à la console, et utilisons le :

xdel(winsid())
plot
exec("SCI/modules/gui/demos/uicontrol_plot3d.dem.sce",-1);

// Deux fenêtres graphiques sont ouvertes. Celle de la démo plot3d est active.

gui2bitmap("setMenu",get(0));
// Observer la barre de menu de la console => menu gui2bitmap proposé.
// L'utiliser et en observer le déroulement.

Auteur

Samuel GOUGEON

Voir aussi

Historique

VersionDescription
1.0 2019-08-02 : première publication
1.1 2019-08-05 :
  • Sous Windows, gui2bitmap() désormais détecte et gère les cas où la fenêtre graphique traitée est partiellement décalée hors écran.
  • 3 bugs corrigés.
1.2 2019-08-09 :
  • gui2bitmap() fonctionne désormais aussi sous Linux et MacOS.
  • Syntaxes "setMenu", "setBorders", et "setScale" ajoutées.
  • Tests unitaires ajoutés.