/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.