APPLICATIONSCREATION GRAPHIQUE ★ TRAMES ET COLLAGESt|CPC Revue) ★

Traitement de l'Image Part2a|CPC Revue)Traitement de l'Image Part2b|CPC Revue)Traitement de l'Image Part3|Amstar&CPC)Traitement de l'Image Part4|Amstar&CPC)Trames et Collages

Dans la lignée des routines graphiques, voici une technique bien connue dans le tricot et dans la couture : le PATCHWORK. Rassurez-vous, nul besoin d'aiguilles a tricoter, de ciseaux, ni de fils à coudre. Votre AMSTRAD fera parfaitement l'affaire. En effet, la routine,ou plutôt les routines que nous vous proposons sont aussi bien connues dans les arts graphiques.

Nous vous expliquons d'abord le pourquoi de ces routines. L'écran en mode 2 ne possède que deux couleurs, papier et crayon. Pour différencier les surfaces, il ne reste donc qu'un moyen : le tramage. Si ce tramage est régulier, autant le rendre automatique à partir de quelques paramètres simples et évidents. Pour éviter de rester enfermé dans une trame orthogonale, il fallait aussi donner la possibilité de copier n'importe quel dessin en l'incrustant dans un contour irrégulier. Pour certains dessins, ces contours sont pratiquement indispensables, comme c'est le cas des cartes géographiques. Pour d'autres, notamment pour les tableaux d'artistes, les contours sont plutôt indésirables car ils donnent l'impression de dessin remplis et non de peinture. D'où l'idée d'aller encore plus loin, en supprimant les contours devenus inutiles.

dans un contour irrégulier. Pour certains dessins, ces contours sont pratiquement indispensables, comme c'est le cas des cartes géographiques. Pour d'autres, notamment pour les tableaux d'artistes, les contours sont plutôt indésirables car ils donnent l'impression de dessin remplis et non de peinture. D'où l'idée d'aller encore plus loin, en supprimant les contours devenus inutiles.

ENCADRE 1

100 ' PROGRAMME DE DEMONSTRATION DES TRAMES ORTHOGONALES * INEVITABLE CAMEMBERT
110 MEMORY &1FFF: MODE 2 : LOAD "trames.bin":POKE &B6A3,255
120 WINDOW 1,80,23,25:ORIGIN 0,0:WINDOW #1,1,80,1,22:r=100:MOVE 419,199
130 FOR i=0 TO 2.5*PI STEP PI/20:DRAW 319+COS(i)*r,199+SIN(i)*r:NEXT i
140 FOR i=1 TO 8:MOVE 319,199:a=a+PI/20*i:DRAWR 99*COS(A),99*SIN(A):NEXT i
150 o=0:FOR i=1 TO 8:o=o+PI/20*i+PI/40
160 MOVE 319+50*COS(o),199+50*SIN(o):READ a,b,c,d,t
170 POKE &9FEA,a:POKE &9FEB,b:POKE &9FEC,c:POKE &9FED,d:CALL &A000,t:NEXT i
180 DATA 1,4,1,6,2
190 DATA 0,0,0,0,0
200 DATA 2,2,2,2,2
210 DATA 0,2,2,2,2
220 DATA 1,1,1,1,2
230 DATA 4,4,4,4,1
240 DATA 2,2,0,2,2
250 DATA 2,4,1,5,1
260 DATA 2,4,1,5,2
270 POKE &B6A3,255:a$="CAMAMBERUS VULGARIS":TAG#1:MOVE 240,350:PRINT#1,a$;:END
280 END

Voyons maintenant comment.

L'ensemble des routines est divisé en deux parties bien distinctes et d'accès séparés. La première partie est composée d'une routine multiusage à trois options dont une à deux variantes. En voici le détail :

  • option 0 : routine préliminaire servant principalement à déterminer les coordonnées de tous les points indispensables du contour de la zone à tramer. Elle peut être utilisée en tant que routine "FILL" absente sur les CPC et 664. A signaler, toutefois, l'existence des routines beaucoup plus rapides. Il est donc déconseillé d'utiliser l'option 0 dans le seul but de "REMPLIR" d'encre une surface de contour quelconque fermé,
  • options 1 et 2 : génération automatique des "TRAMES ORTHOGONALES" dans l'emprise déterminée par l'option 0. Précisons que les options 1, 2 et 3 passent automatiquement par l'option 0. Il ne faut surtout pas faire des passages successifs pour une même emprise. L'option 1 dessine des traits de couleur "papier" sur le fond de couleur "crayon". L'option 2 dessine le contraire : des traits de couleur "crayon" sur le fond de couleur "papier". En somme, l'option 2 est en mode normal et 1 en mode inverse,
  • option 3 : incrustation dans le contour (toujours déterminé automatiquement par l'option 0) d'une image relevée sur un écran virtuel placé à l'adresse $4000 : "PATCHWORK".

La deuxième partie contient une seule routine : "POCHAGE". En réalité, on pourrait appeler cette routine "effacement", car elle gomme les points des contours. On obtient ainsi l'impression de collage ou de pochage, selon l'option utilisée pour le tramage (ou le remplissage).

  • L'option 3 est la plus importante. Elle permet non seulement d'utiliser n'importe quelle trame, mais aussi de réaliser des mixages, incrustations, médaillons et toutes sortes de collages à partir de dessins libres. Mais reprenons au début.

Avant tout, procédez à la saisie de la routine, soit en utilisant un éditeur-assembleur, soit par la méthode bien connue des DATAs. Ensuite, après avoir sauvegardé la routine binaire sous le nom"trames",(SAVE"TRAMES",b,&A000,&55D), utilisez les deux programmes de démonstration des encadrés 1 et 2. Leur utilisation est détaillée plus loin. Si vous n'obtenez pas les images voulues, corrigez vos erreurs de saisie.

FIGURE 1 ►

La routine peut être utilisée pour n'importe quel dessin pourvu qu'il soit en mode 2 et sans scrolling de l'écran. Il faut d'autre part réserver au moins une ligne pour le texte en vue du travail en mode direct et pour divers messages. L'écran graphique doit être limité en conséquence, afin d'éviter tout chevauchement avec fenêtre texte. Avant de faire l'appel à la routine par CALL &A000, OPTION, le curseur graphique doit être placé à l'intérieur du contour intéressé par MOVE X, Y. Quelle que soit l'option demandée la première partie de la routine identifie les points de contour et inverse en même temps la couleur de l'emprise. Cette inversion est indispensable pour la méthode d'identification utilisée.

Les abscisses des points gauche et droit d'une ligne, ainsi que l'ordonnée commune, sont rangés dans les tables. Le contour doit être absolument fermé. Un seul point manquant et tout le dessin peut être perdu I Pour éviter les dégâts dus à une mauvaise manoeuvre, la routine comporte un arrêt d'urgence que l'on provoque en appuyant sur la touche ESC.

En cas de l'option 0-"REMPLIR", la routine s'arrête après l'inversion de couleur de l'emprise. Dans le cas d'un autre choix, le paramètre d'option est testé et le programme continue selon le cas.

Les trames orthogonales sont générées automatiquement en fonction de quatre paramètres :

  • A - Nombre de lignes pleines d'un motif (épaisseur du trait)
  • B - Nombre de lignes vides d'un motif (épaisseur du blanc)
  • C - Nombre de colonnes pleines
  • D - Nombre de colonnes vides.

Ces paramètres sont demandés uniquement par les options 1 et 2. Pour transformer l'accès à la routine, le nombre de paramètres transmis par CALL est limité à un seul : le numéro de l'option.
Pour cette raison les valeurs (ou les variables) A, B, C et D qui définissent la trame doivent être placées directement par "POKE" avant l'appel de la routine. Les adresses concernées sont, dans l'ordre respectif, &9FEA, &9FEB, &9FEC et &9FED. La ligne 170 du programme de l'encadré 1 vous en donne l'exemple.

ENCADRE 2

10 MEMORY &1FFF:MODE 2:POKE &B7C6,&40:FOR i=1 TO 12':LOAD"trames.bin"'BRAQUE
20 PRINT"soracom editions soracom editions soracom";'ALEATOIRE
30 PRINT" editions soracom editions soracom edi";
40 PRINT"ons soracom editions soracom editions sora";
50 PRINT"com editions soracom editions soracom":NEXT i
60 POKE &B7C6,&C0:CALL &BC06,&C0:WINDOW 1,80,25,25:POKE &B6A3,255
70 DIM x(5),y(5),z(5)' Le remplissage du fond doit etre arrete juste
80 FOR i=1 TO 5 :RANDOMIZE TIME' avant la fin
90 x=RND(1)*489+100:y=RND(1)*249+100
100 x(i)=INT(x):y(i)=INT(y)
110 r=RND(1)*(640-x):r1=r/(640-x)*(400-y) : IF r1120 r(i)=INT(r)-50*(r<50):MOVE x+r(I),Y
130 IF y+r(i)>399 OR y-r(i)<0 THEN 110
140 IF x+r(i)>589 OR x-r(i)<0 THEN 110
150 FOR j=0 TO 2.2*PI STEP 0.05:DRAW x+COS(j)*r(I),y+SIN(j)*r(I):NEXT j:MOVE x,y
160 a=RND(1)*(599-x):b=RND(1)*(399-y):a=INT(a)-50*(a<50):b=INT(b)-50*(b<50)
170 IF x+2*a>599 OR i+2*b>399 THEN 160
180 IF x-a<0 OR y-b<0 THEN 160
190 DRAW x+a,y+b:DRAW x+a*2,y:DRAW x+a,y-b:DRAW x,y:NEXT i:FOR i=1 TO 5
200 p=TEST (x(i)-1,y(i)-2):IF p<>0 THEN x(i)=x(i)-1:y(i)=y(i)-2:GOTO 200 
210 READ a,b,c,d,type:POKE &9FEA,a:POKE &9FEB,b:POKE &9FEC,c:POKE &9FED,d 
220 MOVE x(i)-1,y(i)-1:CALL &A000,type
230 type=(type=2)-(type=1)+type:IF type=0 THEN type =3
240 p=TEST(x(i)+r(i)/2,y(i)+r(i)/4)
250 IF p<>0 THEN x(i)=x(i)+1:y(i)=y(i)+2:GOTO 240 
260 MOVE x(i)+r(i)/2,y(i)+r(i)/4:CALL &A000,type:NEXT i:POKE &B6A3,255
270 MOVE 10,10 :CALL &A000,0:POKE &B6A3,255
280 FOR i= 1 TO 10: CALL &A481,i: NEXT i
290 DATA 1,6,1,6,2,4,4,4,4,1,0,0,0,0,0,1,4,0,5,2,0,5,1,4,2


ENCADRE 3

100 ' reperage du contour, ecran virtuel
110 POKE &B7C6,&40:CALL &BC06,&40
120 INPUT"Numero du contour ( 0 a 9)";n
130 a=&2200+n*&600
140 IF n>4 THEN a=&8000+(n-5)*&600 
150 b=a+&200:c=a+&400
160 x1=PEEK(a)+256*PEEK(a+1)
170 y1=PEEK(b)+256*PEEK(b+1) 
180 z1=PEEK(c)+256*PEEK(c+1) 
190 IF PEEK(a+1)=&FF THEN 250
200 x=PEEK(a)+256*PEEK(a+1)
210 y=PEEK(b)+256*PEEK(b+1)
220 z=PEEK(c)+256*PEEK(c+1)
230 PLOT x,y,1:PLOT z,y,1
240 a=a+2:b=b+2:c=c+2:GOTO 190
250 INPUT "appuiez sur RETURN";a$:MODE 2
260 WINDOW 1,80,23,25
270 POKE &B7C6,&C0:CALL &BC06,&C0
280 PRINT "coordonnees du depart ";
290 PRINT x1;y1;z1:END

La routine place la valeur -"inverse', ou la valeur ne fait rien” en fonction de l'option 1 ou 2. Elle calcule la largeur du motif : F = C + D et la hauteur du motif : E = A + B. Les coordonnées du point à traiter étant X, Y la condition pour obtenir un "blanc'' est : (Reste de X/F>C et reste de Y/E>A). Ce blanc aura la couleur soit du fond, soit du crayon en fonction de l'option 1 ou 2.

Pour illustrer l'utilisation des paramètres A, B, C, D combinés avec options 1 ou 2, vous pouvez utiliser le lis ting de l'encadré 1. Si la saisie de la routine était correcte, vous devez obtenir l'image de l'encadré.

Les trames générées peuvent être très utiles pour les cartes géographiques (figure n° 1) ou tout autre traitement nécessitant la différenciation de plusieurs
surfaces. (Rappelons qu'en mode 2, nous ne disposons que de deux couleurs différentes, d'où la nécessité de tramage) La trame générée est par

définition continue. Si l'on utilise une même trame pour plusieurs zones, on se rendra bien compte de cette continuité, ce qui peut être utile.

L'option 3 est la plus intéressante. Elle peut être exploitée de plusieurs manières.

Commençons par la plus simple, l'extension de tramage à n'importe quel type de trame En effet, les trames orthogonales régulières ne permettent pas une pleine expression artistique. Les trames désirées doivent être créées auparavant. Chaque trame doit occuper toute la surface de l'écran et doit être placée à l'adresse &4000 (début de l'écran virtuel) avant l'utilisation. Le contour de l'insertion doit être réalisé comme précédemment et la routine est appelée par CALL &A000.3.

La deuxième utilisation est l'incrustation en médaillon (comme pour les photos de groupe avec, en médaillon, les portraits des personnages dont on parle).

Il est évident que le dessin à extraire de l'écran virtuel doit occuper la même place à l'écran que le médaillon. Ceci n'est pas toujours possible.

Il faut donc déplacer le dessin de l'écran virtuel pour qu'il occupe la place voulue. Si vous possédez un scanner de la Société DART, le logiciel fourni avec cet appareil, le "DARTSCAN" fait celà à merveille, sinon créez une petite routine ou même un simple programme en BASIC, qui bien entendu sera plus lent.

Le principe de l'incrustation dans un contour tout à fait quelconque est strictement le même.

Pour faire coïncider l'image avec contour, on procède comme pour le médaillon, mais pour mieux visualiser le découpage, on complète la procédure selon la méthode suivante :

  • l'image à incruster est placée sur l'écran virtuel ;
  • l'image à compléter est sur l'écran affiché ;
  • utilisez l'option 0 pour identifier le contour ;
  • lancez le petit programme de l'encadré n° 3 (saisi et sauvegardé auparavant sous le nom "CONTOUR") par RUN"CONTOUR".

L'écran virtuel sera affiché, le contour apparaîtra sur cet écran et vous pourrez mieux vous rendre compte de l'effet. S'il vous satisfait, modifiez comme pour le médaillon la position de l'image à insérer, lancez la suite de la routine. Dans le cas contraire, recommencez. La suite de la routine se lance par CALL &A553.

La routine facultative concerne les "POCHAGES". Au fur et à mesure des remplissages ou collages, la routine sauvegarde automatiquement les tables de coordonnées des contours. Toutes les tables sont dimensionnées pour 512 octets (512 points). Dans les cas courants, ceci est suffisant. Si vous devez traiter un contour très important, vous devrez modifier la routine en conséquence ; les tables des contours sont sauvegardées par paquets de trois blocs de 512 octets (trois coordonnées pour 2 points) à partir de l'adresse &2200. On peut réaliser dix contours d'affilée, après quoi la routine remet le compteur à zéro. A partir de ce moment, vous perdrez un à un les anciens contours au profit des nouveaux. Un BIP vous avertit de la fin d'un contour. Les contours sont numérotés de 0 à 9, le 9 étant le dernier réalisé et le 0 le premier.

Les pochages sont réalisés de façon sélective en donnant le numéro de contour que l'on désire effacer : CALL&A481, n°. Ne jamais effacer un contour avant que toutes les surfaces adjacentes extérieures au contour aient déjà été trouvées (ou incrustées). La délimitation des emprises étant perdue après l'effacement du contour, toute tentative de traçage d'une zone adjacente provoquera un beau gâchis ! Les pochages n'agissent pas sur les parties horizontales des contours. L'encadré 2 contient un exemple de Patchwork et le listing du programme en BASIC correspondant. Ils vous permettront de tester l'exactitude de la saisie.

La routine est faite pour CPC 6128. Les adresses à modifier pour CPC 464 sont données dans le commentaire du listing.

Derniers conseils : si à la place de l'écran complet, vous utilisez des fenêtres graphiques, veillez à border cette fenêtre d'un cadre.

utiliser les contours "ouverts" et éviterez les blocages. Si vous avez interrompu la routine lors de son passage par l'option 0 (identification du contour), n'essayez pas d'effacer ce contour, vous risqueriez la panne complète. Si vous utilisez le programme "BRAQUE" et que l'attente du dessin se prolonge de trop, n'hésitez pas à appuyer deux fois sur ESC et à relancer le programme. Vous ne réussirez certainement pas un dessin du premier coup à cause des paramètres aléatoires. Evitez les paramètres 1,1,1,1.

NB : Pour les 464, il faut remplacer les adresses suivantes (dans TOUS LES PROGRAMMES) :

  • &B6A3 par &B338
  • &B6A4 par &B339
  • &B7C6 par &B1CB

CPC n° 24

★ EDITEUR: CPC Revue
★ ANNÉE: 1987
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LICENCE: LISTING
★ AUTEUR: D. VASILJEVIC

★ AMSTRAD CPC ★ DOWNLOAD ★

Je participe au site:
» Newfile(s) upload/Envoye de fichier(s)
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Photo-Sprite/Genephot (CPC Revue)
» Applications » Traitement de l'Image Part4 (Amstar&CPC)
» Applications » Minimag (Computing With the Amstrad)
» Applications » Kernel - Modeles Numeriques de Terrain (CPC Infos)
» Applications » Character Definer (Amstrad Action)
» Applications » Amstrad 3D

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 135 millisecondes et consultée 505 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.