PROGRAMMATION EN BLITZ BASIC par Mathieu Chenebit
Ca y est ! J'ai enfin trouvś le programme qui va nous occuper durant plusieurs numeros. Je suppose qu'en lisant attentivement Amiga News, vous avez remarquś ia rubrique de Barrou Diallo sur le traitement numerique des images. Et bien, figurez-vous que nous allons mettre ses cours en pratique afin d'obtenir notre pro-pre soft de traitement d'images (genre GFX LAB par exemple). At tention, cet article va etre un peu theorique du fait qu'il faut jeter les bases de notre programme sur papier.
C’est la premiere chose a faire avant de se lancer dans Iścriture d'un programme. Celui-ci peut se faire dans votre tete, ou bien sur papier, suivant l'envergure du projet. II est de toutes manieres prefe-rable d’en faire un pour śviter de rśścrire plusieurs fois les memes routines. Dans notre cas, il nous faut plusieurs choses: un programme multi-images (comme Photogenics), multi-effets, gśrant de 2 ś 256 couleurs (Amiga AGA seulement), possedant un Undo, loca-lisś, disposant d’une aide en ligne et bien entendu systśme. Les deux premiers points vont impliquer une grandę modularitś de manierę ś ce que nous n ayons pratiquement rien a modifier en rajou-tant des effets ou en utilisant plusieurs images. Nous n’allons malheureusement pas tout traiter dans cet article, faute de place, mais ne vous inquietez pas. vous en decouvrirez un peu plus le mois prochain.
Pour ce qui est de 1'interface graphique, nous allons ouvrir notre propre ścran (c est plus simple pour nous que de l’ouvrir sur 1'ecran du WorkBench) mais tout en laissant a 1’utilisateur la possibilitś de
choisir quel modę d ścran il dśsire. Nous allons donc creer un re-quester de screenmode tout simple. Ensuite, il va falloir dśfinir des menus. Nous aurons : Charger, Sauver. Sauver Sous. Voir (pour voir notre image en plein ścran et non pas dans la seule fenśtre de previ-sualisation), Infos (informations concernant 1'image), Ouitter. De plus, il va donc nous falloir trois fenśtres : une pour les effets, une conte-nant la listę de nos images, et une fenetre de prśvisualisation affi-chant une partie de 1'image active. Notez qu'on pourrait tout aussi bien associer une fenetre a chaque image pour pouvoir en afficher plusieurs en mśme temps, mais cela ralentirait d'autant le programme et la consommation en RAM grimperait en flśche. On va donc se passer de cette option Attachons-nous ś la fenetre des effets: pour que 1'utilisateur puisse faire un choix le plus simplement du monde. nous allons avoir recours a un ListView (cf Amiga News an-tśrieurs). Pour notre fenetre contenant les noms des images char-gees. nous allons faire appel a des GTButton qu’on reinitialise ś cha-que chargement d'une image On aurait pu aussi bien utiliser un List-View, mais autant vous faire voir un peu de tout;-) Certains program-mes affichent 1’image reduite, mais j'ai trouvś cette possibilitś beau-coup trop lente pour les petites configurations. Nśanmoins, les gros-ses configurations pourront s'y essayer avec les commandes Redu-ceX2, Scalę, GetAShape et enfin WBIit pour "coller'' vos etiquettes. La fenetre de previsualisation est quant a elle toute simple : nous nous contenterons d'y coller une partie des images (d’ou le terme PreView) avec la commande BitmapToWmdow. Maintenant, attar-dons-nous un petit peu sur le modę multi-images. Pour arriver a cela, il nous faudra crśer une table d'un type nouveau (NEWTYPE) appele tout simplement ... picture :-) Nous devons dśfinir les champs de notre NewType: pour cela. il faut penser aux informations a stocker concernant notre image. II nous faut son numśro. le nu-mśro de sa palette (ce dernier est optionnel car c'est le meme que le numśro de 1’image, nśanmoins je 1'utilise pour plus de clartś dans mes routines), le nombre de plans. le nombre de couleurs (lui aussi optionnel, il est obtenu a partir du nombre de plans), la hauteur de 1’image, sa largeur, son ViewMode, son chemin d'accśs et son nom. Ouf, c’est fini! Comme vous pouvez donc le constater. c'est donc un NewType assez imposant que nous allons utiliser. Mais cette stature
WBStartupNcO WbToScreen 0 ShowScroen 0
DEFTYPE .1 IferMM »enFX IfenPRE DEFTYPE b valeur,FontHe ght
H isRf>qTooisActM>o-i . or effectue ce petit tost af n de sassuror que la Regtools.hbrary est b»en prś-sentp
ReqNonActiveoEasyReQuesłf Errof !\'Cannoł oper Reqtools iib+ChrSOOKPlease check It and retry/Onay*)
ForbidjEnd
Endlf
#TMP=11 ; numśro du bitmap tcmporaire pocr 1'effet do rotalion
: constantes des drftśrentes ferśtres #SM-0 . fenetre ScreenMode #IM=1 ; fenśtre ,maqe sślcctiornśe #FX=? ; fenśtre oi.tLs *PRE=3 . fenśtre preutew #VIFW^4 ; lenśtre visuaksa#on p.eme
; Numćroc des diffśrenles GTList donl nous allons avoir bescin #GTTOOLS=0 : fenśtre outls #GTIMAGES-1 . fenetre sślecton #GTSCREENMOOE-2: fnnAtre ScreenMoae
W ReadFiln(0.'ENV Sysflom prefs*); C esi la mńrrc routirotto que le mr.is oemier pour sais>r la polioe de r.aractere par dćfaut Fields 0.vaeur
k-??6 ; 62 pour les icśnes 226 par defaut • 390 pour I'ścran
Get O.g
Font$ -Font$vChr$(valeur)
9*1
Untl vaeur<33 Forrt$=Unleft$(Font$. 1)
Got O k 3
FontHe»ghi-vaieur
GoseFtoO
If Exists(*Fonts' +FonlS)
LoadFont O.FontS.FontHeight; on charge cette pofcce Endlf Endlf
MaaLen SvChS*192 ; on dśfinil la taiie maxlmum pour les chaines de chargement et de
sauveqarde des images
Marlen SvNomS-l9?
MaaLcn LdCh$-l92 MaxLen LdNom$ri92
WHYIM=?16WHFX-204
SLargeu r=WBWKflh
SMauteur=WBHeight
If WBWdth>=-350 Thcn taqecran=S8000
H WRWdlh>-800 Then tagecran^S8020
H WBHeigHt>-320 Then lagecran*$4;WHYIM~4?2 WHFX=460
NEWTYPE peture parte TRES impertante le type pteture Num w: numśro du bitmap NumPal: numśro de la palette
Plans . nombre de plans NBC ; nombre do couleurs Hauteur Largeur
VM ; !e ViewMcde de timage Acces s ; son chcmn d'accśs Nom s; son nom seulement End NEWTYPE
NEWTYPE .toołs Tpos.w Tnoms
End NEWTYPE
NEWTYPE .Ser Epos w Etext s
End NEWTYPE
Oim image picture (10); 10 images maxi. c‘cst largement suffisant. SI vous śf«s
maso chisle. mottez ce nombre a 99 ;•)
Om chano.s (3)
Om mode$(3)
Om ScrM s (7)
Om List ouNs.lools (3)
Dłm Ust Ecran ser (7)
chainefOpYoułez vous effectuer un degradc' *Chr$(iO)+'on mvcaux dc gns ?" cłvj ne(iy^*Voule7 wous appliquer un eftd del,*Chr$(10)-»rnegativisation a votro image ?' chaire(2)=*Vou,ez vous appitquer un etfel * *Chr$(lO)+*rotation a vołre image V
modo$(0)=’Degrade Gris" mode$(i )="Negat»f modo$(2)-'Roiat»on*
While Adoitem(ouiiisO) : voic une mśthode pour rangęr une table List outifeO pns-z.mode${7)
Z4 1
We ryj
0k2 Addltem(EcranO) ; et en voiei une autre plus classique Fcran()\Epos-0 “Basse Pesoluttor"
ok?-AiadltBm(Ecran()) ; cela revient exactemeni au meme sauf que le premier cas est p.us court
Ecran()\Epos-1.*Basse Resdulion Enfrelacee'
ok2^Add«om(Ecran())
Ecran()\EpoR^?."Hairte Resolulon* ok2=Addltem(Ecran())
EcranO\Epos-:3,‘Haute ResoU.tion En1relaceeu ok2=Adoltem(Ecran())
Ecran()\Epos-4.'Supcr Haute Resolution' ok2=Addlterr(Ecran())
Ecrany\Epos-5,"Super Haute Resolution Fnlreiacee' ok2=Addltem{Ecran())
Fcran{)VEpos-6.*ldcntxJue au Worfcfierch"
Golo ScreenMode : on choisil rotre ścran Votr plus bas Pr9
Screen 1,0 0 SI argeur.SHautour8.tagocmn,'Sluoio FX*,1.2 ;oc ouvre notre ścran pnncpal..
Wmdow #IM,O.WHYlM.SLargeur.40 $i40E.' Images D spon Wes" 1.2.1 ; et »es fenśtres qu lui sent as-soośes
52
AmigoNews Fevrier 1997 N* 98