ScreenXtra et Capture Xobj (D6)

 

L'Xobjet Capture pemet la copie d'un partie de la scène et l'enregistrement de l'image sur le disque de l'utilisateur. Léger et d'une utilisation aisée puisqu'il n'admet que deux méthodes, Capture Xobj possède néammoins deux défauts : Il ne fonctionne que sur Mac et, comme tout xobjet, requiert une instanciation. Un approche plus moderne du developpement lui préferera L'Xtra ScreenXtra qui accomplit les mêmes tâches plus quelques autres beaucoup plus simplement. Nous vous présentons ici les deux xchoses.

 

Utiliser Capture Xobj (D6)

On commence par ouvrir la fenêtre message de Director 5 et l'on s'enquiert des Xchoses disponibles en saisissant ShowXlib :

showxlib
-- XLibraries:
-- Xtra: FileXtra
-- Xtra: UiHelper
-- Xtra: JavaConvert
-- Xtra: CompileJava
-- Xtra: QuicktimeSupport
-- Xtra: NetLingo
-- Xtra: Mui
-- Xtra: fileio
-- "*Standard.xlib"
-- XObject: SerialPort Id:200
-- XObject: XCMDGlue Id:2020

Rappelons que la première partie de cette liste, cite les Xtras disponibles (placés dans le dossier Xtras au lancement de l'application). Nous ne nous intéressons qu'aux xobjets : aucun Xobjet externe n'apparaît dans la deuxième partie, nous allons y remédier en indiquant à Director le chemin et le nom de fichier du fragment de code externe que nous voulons utiliser. L'Xobjet Capture est sur le bureau du Mac:

openxlib "Macintosh HD:desktop folder:capture xobj"

Director n'indique pas si l'ouverture de l'Xobjet a réussie. pour le savoir et connaître le nom véritable de l'Xobjet, Il nous faut interroger Director un nouvelle fois :

showxlib
-- XLibraries:
-- Xtra: FileXtra
-- Xtra: UiHelper
-- Xtra: JavaConvert
-- Xtra: CompileJava
-- Xtra: QuicktimeSupport
-- Xtra: NetLingo
-- Xtra: Mui
-- Xtra: fileio
-- "*Standard.xlib"
-- XObject: SerialPort Id:200
-- XObject: XCMDGlue Id:2020
-- "Macintosh HD:desktop folder:capture xobj"
-- XObject: Capture Id:27112

On passe à l'Xobjet la méthode globale mDescribe afin de connaître les méthodes disponibles ::

put Capture(mdescribe)

-- Factory: Capture ID:27112
-- Capture XObject v1.00
-- 9/30/94 -
-- (c) Copyright 1994 by Oakleaf Designs
--Oakleaf Designs 10018 Oakleaf Place Cupertino,
-- CA 95014-1107 Phone: 408/257-1547 Fax: 408/252-6116
-- Email: info@oakleaf.com
-- WWW: http://www.oakleaf.com
IIIII mNew, t, l, b, r -- Create new instance
IS mSave, filename -- Write named PICT file
----

Les premières lignes portent mention de l'auteur. Les lignes suivantes présentent une à une et de façon conventionnelle, les méthodes utilisables. Chacune de ces lignes est rédigée de la même manière :

Le groupe de lettres initiales (capitales souvent) fournit de indications sur le type que la fonction retourne (premier caractère) et le type d'arguments qu'elle requiert (tous les autres).

X indique que la fonction ne retourne aucune valeur
I désigne un entier
S une chaîne de caractères entre guillemets

plus rarement on rencontre dans ces listes :
L pour une liste d'entiers
P pour une image
O pour une instance d'Xobjet
V pour une variable

Nous devons commencer par créer une instance de l'objet en utilisant la méthode globale mNew. C'est lors de l'instanciation qu'il nous faut indiquer les coordonnées rectangulaires de la portion de la scène à capturer. Nous allons stocker l'instance dans la variable CRAPO.

set CRAPO to Capture(mNew, 20,20, 120,120)

Notre objet CRAPO est maintenant prêt à obéir à nos instructions. Toujours avec les Xobjets la structure est la suivante : à l'objet on passe une méthode et ses arguments entre parenthèses. Capture ne nous laisse pas d'autre choix que d'enregistrer au format PICT une copie de la zone désignée.

CRAPO(mSave, "Macintosh HD:Desktop folder:essai.pict")

Apparaît alors sur le bureau l'icône d'un fichier PICT. C'est l'image de la zone capturée. Si nous souhaitons réutiliser cette copie dans l'animation en cours, il nous faut demander à Lingo son ajout au scénario. Nous créeons un nouvel acteur (acteur numéro 5) de type dessin dans la distribution  :

new(#bitmap, member 5 of castLib 1)

Et nous lions cet acteur au fichier image créé sur le bureau par Capture Xobj :

set the filename of member 5 to "essai.pict"

La copie réalisée d'une partie de la scène fait désormais partie de la disrtribution et peut être utilisée dans l'animation.

Nous pouvons nous débarrasser de l'objet CRAPO et libérer la mémoire :

CRAPO(mDispose)

on clos le fichier de l'xobjet par :

closeXlib "Macintosh HD:desktop folder:capture xobj"

 

ScreenXtra

Xtra Lingo "moderne", plus facile à mettre en oeuvre, plus complet aussi, ScreenXtra satisfera tous ceux que les formulations objet rebutent. Une fois le fichier de l'Xtra ouvert (et il peut l'être automatiquament s'il se trouve dans le dossier Xtras au lancement de l'application), on dispose de nouvelles instructions sans avoir eu besoin de créer aucune instance de l'Xtra. ScreenXtra permet aussi la génération directe d'un acteur à partir d'une copie d'écran. Voyons cela :

Parce qu'il n'était pas situé dans le dossier Xtras de l'application, on doit ouvrir le fichier ScreenXtra situé sur le bureau. Nous saisissons dans la fenêtre message :

openxlib "Macintosh HD:desktop folder:ScrnXtra"

La commande showXlib nous informe de la disponibilité de ScreenXtra :

showxlib
-- XLibraries:
-- Xtra: FileXtra
-- Xtra: UiHelper
-- Xtra: JavaConvert
-- Xtra: CompileJava
-- Xtra: QuicktimeSupport
-- Xtra: NetLingo
-- Xtra: Mui
-- Xtra: fileio
-- "*Standard.xlib"
-- XObject: SerialPort Id:200
-- XObject: XCMDGlue Id:2020
-- "ScrnXtra"
-- Xtra: ScrnXtra

On veut connaître les "méthodes" mais ici plutôt les commandes de l'Xtra, on saisit donc :

put interface(xtra "ScrnXtra")

C'est une série de commandes de script que l'on obtient, regroupées selon qu'elles permettent la capture d'une partie de la scène ou bien d'une partie de l'écran.

-- "xtra ScrnXtra -- ScrnXtra v2.0.4 of 16-Feb-98 by Kent Kersten
-- Copyright (c) 1996,97,98 Little Planet Publishing. All rights reserved.
-- For updates see http://www.littleplanet.com/kent/kent.html
-- Contact the author at kent@littleplanet.com
-- This no-charge Xtra may be freely distributed as long as it is
-- accompanied by its documentation and sample movie.
--
-- Stage Capture Functions --
* StageToMember int left, int top, int right, int bottom, any memberNumOrName, *
* StageResizeToMember int left, int top, int right, int bottom, int newWidth, int newHeight, any memberNumOrName, *
* StageToClipboard int left, int top, int right, int bottom
* StageResizeToClipboard int left, int top, int right, int bottom, int newWidth, int newHeight
* StageToFile int left, int top, int right, int bottom, string filename
* StageResizeToFile int left, int top, int right, int bottom, int newWidth, int newHeight, string filename
--
-- Screen Capture Functions --
* ScreenToMember int left, int top, int right, int bottom, any memberNumOrName, *
* ScreenResizeToMember int left, int top, int right, int bottom, int newWidth, int newHeight, any memberNumOrName, *
* ScreenToClipboard int left, int top, int right, int bottom
* ScreenResizeToClipboard int left, int top, int right, int bottom, int newWidth, int newHeight
* ScreenToFile int left, int top, int right, int bottom, string filename
* ScreenResizeToFile int left, int top, int right, int bottom, int newWidth, int newHeight, string filename "

Dès lors, il est aisé d'appeler l'une de ces instructions comme on le ferait de n'importe quel commande Lingo :

screentomember(10, 10, 110, 110, 3)

Cette instruction demande la création d'un acteur bitmap (numéro 3) reprenant la zone de l'écran délimité par le rectangle : 10, 10, 110, 110.

Voyez le bel acteur que nous venons d'ajouter à la distribution : un carré de 100 pixels de coté, copie de notre écran.

 

 

Nous vous laissons le soin de découvrir les autres possibilités de ScreenXtra.

On peut songer à quantité d'utilisations de cet outil. La plus évidente : pemettre en animation, à l'utilisateur de conserver un dessin réalisé avec des sprites déplaçables en mode trace. L'Xtra peut aussi servir à créer des miniatures des pages consultées pour en constituer un historique...

 

 

L'Xobjet capture est téléchargeable sur le site d'Oakleaf Designs à Cupertino.
http://www.oakleaf.com/

ScreenXtra peut être téléchargé gratuitement sur la page de son auteur :
http://www.littleplanet.com/kent/kent.html

Dans un article récent, nous mettions en oeuvre la propriété picture of the stage qui permet - dans Director 7 - d'effectuer une capture d'écran de la scène.