/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D ' U N E   M A T R I C E   C O N T E N A N T   4   I M A G E S  :                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande genere une matrice                                                                              */
/*                  contenant quatre images arbitraires                                                                              */
/*                  et la place dans l'image Resultat.                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/images_04$K' :                                                                                             */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1993??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   METTRE_UN_FOND                                                                                                                \
                    FAUX                                                                                                                \
                                        /* Faut-il mettre un fond au cas ou l'on ne charge pas toutes les images...                  */

#define   MOYENNAGE                                                                                                                     \
                    VRAI                                                                                                                \
                                        /* Indique si l'on moyenne ('VRAI'), ou bien si l'on prend le 'MAXI' ('FAUX').               */
#define   CALCULER_LE_MAXIMUM                                                                                                           \
                    CALCUL_DU_MAXIMUM_DANS_UNE_DEMI_FENETRE                                                                             \
                                        /* Dans le cas ou il ne faut pas calculer la moyenne, indique s'il faut calculer le          */ \
                                        /* maximum ('VRAI') ou pas ('FAUX'), c'est-a-dire prendre le point courant...                */

#define   FENETRE_BG                                                                                                                    \
                    VRAI
#define   FENETRE_BD                                                                                                                    \
                    VRAI
#define   FENETRE_HG                                                                                                                    \
                    VRAI
#define   FENETRE_HD                                                                                                                    \
                    VRAI
                                        /* Indique si la fenetre correspondante doit etre remplie par l'image associee ('VRAI') ou   */
                                        /* pas ('FAUX').                                                                             */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   GENERE(generer_la_fenetre,FENETRE,imageR,nom)                                                                                 \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(generer_la_fenetre))                                                                                   \
                         Bblock                                                                                                         \
                         EGAL(nom_image                                                                                                 \
                             ,COND(IFEQ_chaine(nom_postfixe,NOM_UNDEF_VIDE)                                                             \
                                  ,nom                                                                                                  \
                                  ,chain_Aconcaten2_sauf_nom_pipe(nom,nom_postfixe)                                                     \
                                   )                                                                                                    \
                              );                                                                                                        \
                         Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA,nom_image))))                                                  \
                                        /* A = image courante.                                                                       */ \
                              Bblock                                                                                                    \
                              FENETRE(imageR                                                                                            \
                                     ,ImageA                                                                                            \
                                     ,MULTIPLICITE_2x2_POUR_LES_DEMI_FENETRES                                                           \
                                     ,MULTIPLICITE_2x2_POUR_LES_DEMI_FENETRES                                                           \
                                     ,moyennage                                                                                         \
                                     ,calculer_le_maximum                                                                               \
                                      );                                                                                                \
                                        /* R = image courante reduite la ou il faut ; on notera que la reduction de moitie est faite */ \
                                        /*     par extraction du 'MAXI' (voir 'moyennage') et ce afin d'eviter des artefacts dans    */ \
                                        /*     images "multi-palettes"...                                                            */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Test(IL_NE_FAUT_PAS(mettre_un_fond))                                                                      \
                                   Bblock                                                                                               \
                                   Test__CODE_ERREUR__ERREUR07;                                                                         \
                                   Eblock                                                                                               \
                              ATes                                                                                                      \
                                   Bblock                                                                                               \
                                   Eblock                                                                                               \
                              ETes                                                                                                      \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Procedure d'insertion de l'image courante 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...                     */
     DEFV(CHAR,INIC(POINTERc(nom_imageABG),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageABD),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageAHG),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageAHD),NOM_PIPE));
                                        /* Nom des quatre images a reduire.                                                          */
     DEFV(CHAR,INIC(POINTERc(nom_postfixe),NOM_UNDEF_VIDE));
                                        /* Nom d'un eventuel postfixe a placer derriere <nom_imageA> (par exemple '$ROUGE').         */
     DEFV(CHAR,INIT(POINTERc(nom_image),NOM_UNDEF));
                                        /* Nom courant des images.                                                                   */
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
                                        /* Nom de l'image a generer.                                                                 */
     DEFV(Logical,INIT(moyennage,MOYENNAGE));
                                        /* Indique si l'on moyenne ('VRAI'), ou bien si l'on prend le 'MAXI' ('FAUX').               */
     DEFV(Logical,INIT(calculer_le_maximum,CALCULER_LE_MAXIMUM));
                                        /* Dans le cas ou il ne faut pas calculer la moyenne, indique s'il faut calculer le          */
                                        /* maximum ('VRAI') ou pas ('FAUX'), c'est-a-dire prendre le point courant...                */
     DEFV(Logical,INIT(fenetre_BG,FENETRE_BG));
     DEFV(Logical,INIT(fenetre_BD,FENETRE_BD));
     DEFV(Logical,INIT(fenetre_HG,FENETRE_HG));
     DEFV(Logical,INIT(fenetre_HD,FENETRE_HD));
                                        /* Indique si la fenetre correspondante doit etre remplie par l'image associee ('VRAI') ou   */
                                        /* pas ('FAUX').                                                                             */
     /*..............................................................................................................................*/
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("Ireduction_moitie_____compatibilite_20030611=""compatibilite_20030611="
                                       ,Ireduction_moitie_____compatibilite_20030611
                                        );

                         GET_ARGUMENT_C("imageF=""F=",nom_imageF);
                         GET_ARGUMENT_L("fond=",mettre_un_fond);
                         GET_ARGUMENT_C("imageABG=""ABG=",nom_imageABG);
                         GET_ARGUMENT_C("imageABD=""ABD=",nom_imageABD);
                         GET_ARGUMENT_C("imageAHG=""AHG=",nom_imageAHG);
                         GET_ARGUMENT_C("imageAHD=""AHD=",nom_imageAHD);
                         GET_ARGUMENT_C("postfixe=",nom_postfixe);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_L("moyenne=",moyennage);
                         GET_ARGUMENT_L("maximum=",calculer_le_maximum);
                         GET_ARGUMENT_L("BG=",fenetre_BG);
                         GET_ARGUMENT_L("BD=",fenetre_BD);
                         GET_ARGUMENT_L("HG=",fenetre_HG);
                         GET_ARGUMENT_L("HD=",fenetre_HD);
                         )
                    );

     CALi(Inoir(ImageR));
                                        /* Initialisation de l'image Resultat.                                                       */

     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(fenetre_BG,DEMI_FENETRE_BG_MULTIPLE,ImageR,nom_imageABG);
     GENERE(fenetre_BD,DEMI_FENETRE_BD_MULTIPLE,ImageR,nom_imageABD);
     GENERE(fenetre_HG,DEMI_FENETRE_HG_MULTIPLE,ImageR,nom_imageAHG);
     GENERE(fenetre_HD,DEMI_FENETRE_HD_MULTIPLE,ImageR,nom_imageAHD);
                                        /* Reduction primaire,                                                                       */

     CALi(Iupdate_image(nom_imageR,ImageR));
                                        /* 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.