/*************************************************************************************************************************************/ /* */ /* R E D U C T I O N D ' U N E S U I T E D E 1 6 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 4x4=16 (carre) images ; celles-ci */ /* seront disposees ainsi (les numeros */ /* de 00 a 15 donnant l'ordre d'appa- */ /* rition temporelle des images) : */ /* */ /* */ /* Y ^ */ /* | */ /* Ymax |------------------- */ /* | 12 | 13 | 14 | 15 | */ /* |----+----+----+----| */ /* | 08 | 09 | 10 | 11 | */ /* |----+----+----+----| */ /* | 04 | 05 | 06 | 07 | */ /* |----+----+----+----| */ /* | 00 | 01 | 02 | 03 | */ /* Ymin o-----------------------> */ /* Xmin Xmax X */ /* */ /* */ /* ATTENTION : */ /* Pour les images dont les dimensions ne */ /* sont pas divisibles par 4, cette operation */ /* introduit une bande noire a droite (si 'dimX' */ /* n'est pas divisible par 4) et/ou en haut (si */ /* 'dimY' n'est pas divisible par 4). L'utilisation */ /* de '$xci/dilate.01$X' avec "points=49" permet de */ /* corriger le defaut... */ /* */ /* */ /* Author of '$xci/reduction_16$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(DEUX)) \ /* Taille du pave de dilatation si 'IL_FAUT(dilater_les_images)'. */ #define NOMBRE_D_IMAGES_REDUITES \ SEIZE \ /* Nombre d'images constituant la matrice Resultat. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #include xci/reduction.02.I" #define GENERE(FENETRE,imageR) \ Bblock \ GENERE_REDUCTION(FENETRE,imageR,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES,mettre_un_fond,dimension_dilatation); \ Eblock \ /* Procedure d'insertion de l'image courante "standard" dans une fenetre. */ #define F_GENERE(FENETRE,FimageR) \ Bblock \ F_GENERE_REDUCTION(FENETRE,FimageR,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES); \ Eblock \ /* Procedure d'insertion de l'image courante "non standard" dans une fenetre (introduite */ \ /* le 20120608095717). */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* R E D U C T I O N D ' U N E S U I T E D E 1 6 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. Lorsque cette option */ /* est active, on peut remplacer dans l'image fond une ou plusieurs de ses sous-images. */ #include xci/reduction.03.I" /*..............................................................................................................................*/ 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 20150123181059... */ 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 20120724113824 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 20151021173048... */ 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 20060118093110, "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); ) ); /* Le 20030912124220, '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,ImageA1,IFmageA1)); CALi(gInettoyage(les_images_sont_standards,ImageA2,IFmageA2)); CALi(gInettoyage(les_images_sont_standards,ImageA3,IFmageA3)); CALi(gInettoyage(les_images_sont_standards,ImageA4,IFmageA4)); /* Nettoyage non pas par pure hygiene, mais au cas ou des images manqueraient dans la */ /* sequence : cela permet de les remplacer par du noir... */ CALi(gInettoyage(les_images_sont_standards,ImageR,IFmageR)); /* Avant de rentrer les parametres... */ Test(EST_VRAI(les_images_sont_standards)) /* Test (et possibilite) introduit le 20120608095717... */ 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 DOUBLE_FENETRE_HG(ImageA3,ImageR,COND(IL_FAUT(moyennage),VRAI,FAUX)); DOUBLE_FENETRE_HD(ImageA4,ImageR,COND(IL_FAUT(moyennage),VRAI,FAUX)); DOUBLE_FENETRE_BG(ImageA1,ImageR,COND(IL_FAUT(moyennage),VRAI,FAUX)); DOUBLE_FENETRE_BD(ImageA2,ImageR,COND(IL_FAUT(moyennage),VRAI,FAUX)); /* Anti-reduction secondaire. */ 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,ImageA1); GENERE(DEMI_FENETRE_BD_MULTIPLE,ImageA1); GENERE(DEMI_FENETRE_BG_MULTIPLE,ImageA2); GENERE(DEMI_FENETRE_BD_MULTIPLE,ImageA2); GENERE(DEMI_FENETRE_HG_MULTIPLE,ImageA1); GENERE(DEMI_FENETRE_HD_MULTIPLE,ImageA1); GENERE(DEMI_FENETRE_HG_MULTIPLE,ImageA2); GENERE(DEMI_FENETRE_HD_MULTIPLE,ImageA2); GENERE(DEMI_FENETRE_BG_MULTIPLE,ImageA3); GENERE(DEMI_FENETRE_BD_MULTIPLE,ImageA3); GENERE(DEMI_FENETRE_BG_MULTIPLE,ImageA4); GENERE(DEMI_FENETRE_BD_MULTIPLE,ImageA4); GENERE(DEMI_FENETRE_HG_MULTIPLE,ImageA3); GENERE(DEMI_FENETRE_HD_MULTIPLE,ImageA3); GENERE(DEMI_FENETRE_HG_MULTIPLE,ImageA4); GENERE(DEMI_FENETRE_HD_MULTIPLE,ImageA4); /* Reduction primaire, */ DEMI_FENETRE_HG_MULTIPLE(ImageR ,ImageA3 ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,moyennage ,calculer_le_maximum ); DEMI_FENETRE_HD_MULTIPLE(ImageR ,ImageA4 ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,moyennage ,calculer_le_maximum ); DEMI_FENETRE_BG_MULTIPLE(ImageR ,ImageA1 ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,moyennage ,calculer_le_maximum ); DEMI_FENETRE_BD_MULTIPLE(ImageR ,ImageA2 ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,moyennage ,calculer_le_maximum ); /* Reduction secondaire. */ Eblock ATes Bblock F_GENERE(F_DEMI_FENETRE_BG_MULTIPLE,IFmageA1); F_GENERE(F_DEMI_FENETRE_BD_MULTIPLE,IFmageA1); F_GENERE(F_DEMI_FENETRE_BG_MULTIPLE,IFmageA2); F_GENERE(F_DEMI_FENETRE_BD_MULTIPLE,IFmageA2); F_GENERE(F_DEMI_FENETRE_HG_MULTIPLE,IFmageA1); F_GENERE(F_DEMI_FENETRE_HD_MULTIPLE,IFmageA1); F_GENERE(F_DEMI_FENETRE_HG_MULTIPLE,IFmageA2); F_GENERE(F_DEMI_FENETRE_HD_MULTIPLE,IFmageA2); F_GENERE(F_DEMI_FENETRE_BG_MULTIPLE,IFmageA3); F_GENERE(F_DEMI_FENETRE_BD_MULTIPLE,IFmageA3); F_GENERE(F_DEMI_FENETRE_BG_MULTIPLE,IFmageA4); F_GENERE(F_DEMI_FENETRE_BD_MULTIPLE,IFmageA4); F_GENERE(F_DEMI_FENETRE_HG_MULTIPLE,IFmageA3); F_GENERE(F_DEMI_FENETRE_HD_MULTIPLE,IFmageA3); F_GENERE(F_DEMI_FENETRE_HG_MULTIPLE,IFmageA4); F_GENERE(F_DEMI_FENETRE_HD_MULTIPLE,IFmageA4); /* Reduction primaire, */ F_DEMI_FENETRE_HG_MULTIPLE(IFmageR ,IFmageA3 ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,moyennage ,calculer_le_maximum ); F_DEMI_FENETRE_HD_MULTIPLE(IFmageR ,IFmageA4 ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,moyennage ,calculer_le_maximum ); F_DEMI_FENETRE_BG_MULTIPLE(IFmageR ,IFmageA1 ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,moyennage ,calculer_le_maximum ); F_DEMI_FENETRE_BD_MULTIPLE(IFmageR ,IFmageA2 ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,MULTIPLICITE_4x4_POUR_LES_DEMI_FENETRES ,moyennage ,calculer_le_maximum ); /* Reduction secondaire. */ Eblock ETes CALi(gIupdate_image(les_images_sont_standards,nom_imageR,ImageR,IFmageR)); /* Et rangement... */ RETU_Commande; Eblock ECommande