/*************************************************************************************************************************************/
/* */
/* R E D U C T I O N D ' U N E S U I T E D E 4 I M A G E S A R G U M E N T */
/* E T G E N E R A T I O N D ' U N E M A T R I C E L E S C O N T E N A N T */
/* E N V U E D E L E S A N I M E R : */
/* */
/* */
/* Definition : */
/* */
/* Cette commande genere une animation */
/* representee par une suite d'images */
/* et la place dans l'image Resultat. */
/* */
/* */
/* Supposons un tableau carre */
/* de 2x2=4 (carre) images ; celles-ci */
/* seront disposees ainsi (les numeros */
/* de 00 a 03 donnant l'ordre d'appa- */
/* rition temporelle des images) : */
/* */
/* */
/* Y ^ */
/* | */
/* Ymax |--------- */
/* | 02 | 03 | */
/* |----+----| */
/* | 00 | 01 | */
/* Ymin o-------------> */
/* Xmin Xmax X */
/* */
/* */
/* ATTENTION : */
/* Pour les images dont les dimensions ne */
/* sont pas divisibles par 2, cette operation */
/* introduit une bande noire a droite (si 'dimX' */
/* n'est pas divisible par 2) et/ou en haut (si */
/* 'dimY' n'est pas divisible par 2). L'utilisation */
/* de '$xci/dilate.01$X' avec "points=9" permet de */
/* corriger le defaut... */
/* */
/* */
/* Author of '$xci/reduction_04$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1988??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N T E R F A C E ' listG ' : */
/* */
/* */
/* :Debut_listG: */
/* :Fin_listG: */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* F I C H I E R S D ' I N C L U D E S : */
/* */
/*************************************************************************************************************************************/
#include INCLUDES_BASE
#include image_image_IMAGESF_EXT
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#include xci/sequence.01.I"
#undef PAS_DES_IMAGES
#define EDITER_LES_MESSAGES_D_ERREUR \
EDITER_LES_MESSAGES_D_ERREUR_DES_FICHIERS \
/* Indique si les messages d'erreur des fichiers doivent etre emis ('VRAI') ou pas ('FAUX'). */
#include xci/reduction.01.I"
#define DIMENSION_DILATATION \
EXP2(DOUP(UN)) \
/* Taille du pave de dilatation si 'IL_FAUT(dilater_les_images)'. */
#define NOMBRE_D_IMAGES_REDUITES \
QUATRE \
/* Nombre d'images constituant la matrice Resultat. */
#define GENERER_LA_FENETRE_BG \
VRAI
#define GENERER_LA_FENETRE_BD \
VRAI
#define GENERER_LA_FENETRE_HG \
VRAI
#define GENERER_LA_FENETRE_HD \
VRAI
/* Afin de controler selectivement les quatre fenetres {BG,BD,HG,HD}. Cette possibilite */
/* a ete introduite le 20070707102823... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#include xci/reduction.02.I"
#define GENERE(FENETRE,imageR,generer_la_fenetre) \
Bblock \
Test(IL_FAUT(generer_la_fenetre)) \
Bblock \
GENERE_REDUCTION(FENETRE,imageR,MULTIPLICITE_2x2_POUR_LES_DEMI_FENETRES,mettre_un_fond,dimension_dilatation); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Procedure d'insertion de l'image courante "standard" dans une fenetre. */
#define F_GENERE(FENETRE,FimageR,generer_la_fenetre) \
Bblock \
Test(IL_FAUT(generer_la_fenetre)) \
Bblock \
F_GENERE_REDUCTION(FENETRE,FimageR,MULTIPLICITE_2x2_POUR_LES_DEMI_FENETRES); \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
/* Procedure d'insertion de l'image courante "non standard" dans une fenetre. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* R E D U C T I O N D ' U N E S U I T E D E 4 I M A G E S A R G U M E N T */
/* E T G E N E R A T I O N D ' U N E M A T R I C E L E S C O N T E N A N T */
/* E N V U E D E L E S A N I M E R : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageF),NOM_PIPE));
/* Nom du fond a utiliser au cas ou l'on ne charge pas toutes les images... */
DEFV(Logical,INIT(mettre_un_fond,METTRE_UN_FOND));
/* Indique s'il faut mettre ('VRAI') ou pas ('FAUX') un fond derriere... */
#include xci/reduction.03.I"
DEFV(Logical,INIT(generer_la_fenetre_BG,GENERER_LA_FENETRE_BG));
DEFV(Logical,INIT(generer_la_fenetre_BD,GENERER_LA_FENETRE_BD));
DEFV(Logical,INIT(generer_la_fenetre_HG,GENERER_LA_FENETRE_HG));
DEFV(Logical,INIT(generer_la_fenetre_HD,GENERER_LA_FENETRE_HD));
/* Afin de controler selectivement les quatre fenetres {BG,BD,HG,HD}. Cette possibilite */
/* a ete introduite le 20070707102823... */
/*..............................................................................................................................*/
EGAL(files_____editer_les_messages_d_erreur_de_lecture_des_fichiers,EDITER_LES_MESSAGES_D_ERREUR);
/* Initialisation de l'indicateur d'edition des messages d'erreur... */
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(GET_ARGUMENT_L("Ireduction_moitie_____compatibilite_20030611=""compatibilite_20030611="
,Ireduction_moitie_____compatibilite_20030611
);
GET_ARGUMENT_L("compatibilite_20070824=",compatibilite_20070824);
GET_ARGUMENT_L("IFreduction_moitie_____compatibilite_20150123=""compatibilite_20150123="
,IFreduction_moitie_____compatibilite_20150123
);
/* Argument introduit le 20150123180854... */
GET_ARGUMENT_C("imageF=""F=",nom_imageF);
GET_ARGUMENT_L("fond=",mettre_un_fond);
GET_ARGUMENT_P("niveau=",Iinitialisation_____valeur_pour_gInettoyage);
GET_ARGUMENT_F("valeur=",IFinitialisation_____valeur_pour_gInettoyage);
/* Introduits le 20120724113820 pour 'v $xiirs/.PROJ.y1.1.$U valeur=.InFiNi'... */
GET_ARGUMENT_C("imageA=""A=",nom_imageA);
GET_ARGUMENT_L("standard=",les_images_sont_standards);
GET_ARGUMENT_C("postfixe=",nom_postfixe);
GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_I("premiere=""numero=""n=",premiere_image);
GET_ARGUMENT_I("derniere=",derniere_image);
GET_ARGUMENT_F("pas=",pas_des_images);
GET_ARGUMENT_L("calculer=",calculer_le_pas_des_images);
GET_ARGUMENT_L("premiere_derniere=",aller_de_la_premiere_a_la_derniere_image_lors_du_calcul_du_pas_des_images);
GET_ARGUMENT_L("permuter_postfixe_numero=""permuter=""ppn=",permuter_l_eventuel_postfixe_et_le_numero);
/* Argument introduit le 20151021173040... */
GET_ARGUMENT_L("modulo=",gerer_modulo_les_numeros_des_images);
GET_ARGUMENT_L("editer=",editer_le_nom_des_images_reduites);
GET_ARGUMENT_L("editer_numero=",editer_seulement_le_numero_des_images_reduites);
GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);
GET_ARGUMENT_L("dilater=",dilater_les_images);
GET_ARGUMENT_I("points=""pave=""p=",dimension_dilatation);
GET_ARGUMENT_L("tous_niveaux=""tous=",dilatation_tous_les_niveaux);
GET_ARGUMENT_L("dilatation_carree=""dcarree=",dilatation_carree);
/* Le 20060118092917, "carre=" a ete remplace par "dilatation_carree=" et "dcarree=" */
/* (risque de double definition...). */
GET_ARGUMENT_L("moyenne=",moyennage);
GET_ARGUMENT_L("maximum=",calculer_le_maximum);
GET_ARGUMENT_L("fenetre_BG=""BG=",generer_la_fenetre_BG);
GET_ARGUMENT_L("fenetre_BD=""BD=",generer_la_fenetre_BD);
GET_ARGUMENT_L("fenetre_HG=""HG=",generer_la_fenetre_HG);
GET_ARGUMENT_L("fenetre_HD=""HD=",generer_la_fenetre_HD);
/* Parametres introduits le 20070707102823... */
)
);
/* Le 20030912124141, 'files_____editer_les_messages_d_erreur_de_lecture_des_fichiers' */
/* via "erreur=" et "erreurs=" a ete supprime car, en effet, il etait redondant avec */
/* 'v $xig/fonct$vv$DEF ErreurLecture='. */
EGAL(numero_d_image,FLOT(premiere_image));
/* Numero de l'image courante. */
CALi(gInettoyage(les_images_sont_standards,ImageR,IFmageR));
/* Initialisation de l'image Resultat. */
Test(EST_VRAI(les_images_sont_standards))
Bblock
Test(IL_FAUT(mettre_un_fond))
Bblock
Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageR,nom_imageF))))
/* Un fond a ete demande, on le charge... */
Bblock
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
EGAL(mettre_un_fond,FAUX);
/* En cas d'erreur, on supprime le fond, ce qui correspond a un fond 'NOIR'. */
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
GENERE(DEMI_FENETRE_BG_MULTIPLE,ImageR,generer_la_fenetre_BG);
GENERE(DEMI_FENETRE_BD_MULTIPLE,ImageR,generer_la_fenetre_BD);
GENERE(DEMI_FENETRE_HG_MULTIPLE,ImageR,generer_la_fenetre_HG);
GENERE(DEMI_FENETRE_HD_MULTIPLE,ImageR,generer_la_fenetre_HD);
/* Reduction primaire. */
Eblock
ATes
Bblock
F_GENERE(F_DEMI_FENETRE_BG_MULTIPLE,IFmageR,generer_la_fenetre_BG);
F_GENERE(F_DEMI_FENETRE_BD_MULTIPLE,IFmageR,generer_la_fenetre_BD);
F_GENERE(F_DEMI_FENETRE_HG_MULTIPLE,IFmageR,generer_la_fenetre_HG);
F_GENERE(F_DEMI_FENETRE_HD_MULTIPLE,IFmageR,generer_la_fenetre_HD);
/* Reduction primaire. */
Eblock
ETes
CALi(gIupdate_image(les_images_sont_standards,nom_imageR,ImageR,IFmageR));
/* Et rangement... */
RETU_Commande;
Eblock
ECommande