/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A S S A G E   D E S   F A U S S E S   A U X   V R A I E S   C O U L E U R S                                              */
/*        P O U R   U N E   L I S T E   D ' I M A G E S  :                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande calcule les trois                                                                               */
/*                  composantes en vraies couleurs de                                                                                */
/*                  d'une liste d'images Argument.                                                                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/vraies_C.01$K' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1994??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/sequence.01.I"
#include  xci/accumule.01.I"

#define   INVERSER_L_ORDRE_DE_RECUPERATION_DES_IMAGES                                                                                   \
                    FAUX                                                                                                                \
                                        /* Indique s'il faut inverser l'ordre de parcours de l'ensemble des images.                  */

#define   NOMBRE_DE_CHIFFRES_AR                                                                                                         \
                    NOMBRE_DE_CHIFFRES                                                                                                  \
                                        /* Donne le nombre de chiffres des 'ImageA's et des 'ImageR's. Ceci fut introduit le         */ \
                                        /* 20120910150204 afin de permettre, par exemple, de "convertir" une image unique            */ \
                                        /* (nombre_de_chiffres_A=0) en une sequence d'images (nombre_de_chiffres_R=4).               */

#define   GENERER_UNE_IMAGE_EN_VRAIES_COULEURS                                                                                          \
                    VRAI                                                                                                                \
                                        /* Faut-il generer une image en vraies couleurs ('VRAI)' c'est-a-dire dont les trois         */ \
                                        /* composantes ont la meme racine, ou bien trois images "independantes" ('FAUX').            */

#define   GENERER_LA_COMPOSANTE_ROUGE                                                                                                   \
                    VRAI
#define   GENERER_LA_COMPOSANTE_VERTE                                                                                                   \
                    VRAI
#define   GENERER_LA_COMPOSANTE_BLEUE                                                                                                   \
                    VRAI
                                        /* Indicateurs precisant s'il faut generer ('VRAI') ou pas ('FAUX') la composante            */
                                        /* chromatique correspondante...                                                             */

#define   TRANSLATER_LE_NOIR                                                                                                            \
                    LE_NOIR_N_EST_PAS_TRANSLATABLE                                                                                      \
                                        /* Indique si le niveau 'NOIR' est translatable ou pas...                                    */
#define   INCREMENT_DES_NIVEAUX                                                                                                         \
                    ZERO                                                                                                                \
                                        /* Lorsque les niveaux doivent "tourner", on trouve ici l'increment des couleurs...          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   GENERATION_D_UNE_COMPOSANTE(nom_de_la_composante,nom_de_la_couleur,image)                                                     \
                    Bblock                                                                                                              \
                    EGAL(nom_imagesR                                                                                                    \
                        ,COND(IL_FAUT(generer_une_image_en_vraies_couleurs)                                                             \
                             ,chain_Aconcaten3_sauf_nom_pipe(nom_imageR                                                                 \
                                                            ,chain_numero(numero_d_image,NOMBRE_DE_CHIFFRES_R)                          \
                                                            ,nom_de_la_couleur                                                          \
                                                             )                                                                          \
                             ,chain_Aconcaten2_sauf_nom_pipe(nom_de_la_composante                                                       \
                                                            ,chain_numero(numero_d_image,NOMBRE_DE_CHIFFRES_R)                          \
                                                             )                                                                          \
                              )                                                                                                         \
                         );                                                                                                             \
                    CALi(Iupdate_image(nom_imagesR,image));                                                                             \
                                        /* Generation d'une composante d'une image en vraies couleurs...                             */ \
                    CALZ_FreCC(nom_imagesR);                                                                                            \
                    Eblock                                                                                                              \
                                        /* Procedure de generation d'une composante de nom donne...                                  */

#define   NOMBRE_DE_CHIFFRES_A                                                                                                          \
                    MIN2(nombre_de_chiffres,nombre_de_chiffres_A)
#define   NOMBRE_DE_CHIFFRES_R                                                                                                          \
                    MIN2(nombre_de_chiffres,nombre_de_chiffres_R)
                                        /* Introduits le 20120910150204...                                                           */

#include  xci/accumule.02.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A S S A G E   D E S   F A U S S E S   A U X   V R A I E S   C O U L E U R S                                              */
/*        P O U R   U N E   L I S T E   D ' I M A G E S  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imagesA),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
                                        /* Nom de l'image a displayer.                                                               */
     DEFV(CHAR,INIC(POINTERc(nom_paletteA),NOM_PIPE));
                                        /* Nom de la palette a utiliser.                                                             */
     DEFV(CHAR,INIC(POINTERc(nom_imagesR),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
                                        /* Nom de la racine d'une image en vraies couleurs.                                          */
     DEFV(CHAR,INIC(POINTERc(nom_imageRR),NOM_PIPE));
                                        /* Nom de l'image ROUGE a generer,                                                           */
     DEFV(CHAR,INIC(POINTERc(nom_imageRV),NOM_PIPE));
                                        /* Nom de l'image VERTE a generer,                                                           */
     DEFV(CHAR,INIC(POINTERc(nom_imageRB),NOM_PIPE));
                                        /* Nom de l'image BLEUE a generer,                                                           */
     DEFV(Logical,INIT(generer_une_image_en_vraies_couleurs,GENERER_UNE_IMAGE_EN_VRAIES_COULEURS));
                                        /* Faut-il generer une image en vraies couleurs ('VRAI)' c'est-a-dire dont les trois         */
                                        /* composantes ont la meme racine, ou bien trois images "independantes" ('FAUX').            */
     DEFV(Int,INIT(translation_des_numeros_des_images,TRANSLATION_DES_NUMEROS_DES_IMAGES));
                                        /* Les numeros d'images peuvent etre translates. Lorsque tel est le cas, le numero           */
                                        /* d'image utilise est le numero translate modulo {premiere,derniere}.                       */
     DEFV(Logical,INIT(inverser_l_ordre_de_recuperation_des_images,INVERSER_L_ORDRE_DE_RECUPERATION_DES_IMAGES));
                                        /* Indique s'il faut inverser l'ordre de parcours de l'ensemble des images.                  */
     DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE));
                                        /* Numero de la premiere image,                                                              */
     DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE));
                                        /* Numero de la derniere image.                                                              */
     DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES));
                                        /* Pas de passage d'un numero d'image a une autre.                                           */
     DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES));
                                        /* Nombre de chiffres codant le numero des images de la serie...                             */
     DEFV(Int,INIT(nombre_de_chiffres_A,NOMBRE_DE_CHIFFRES_AR));
     DEFV(Int,INIT(nombre_de_chiffres_R,NOMBRE_DE_CHIFFRES_AR));
                                        /* Donne le nombre de chiffres des 'ImageA's et des 'ImageR's. Ceci fut introduit le         */
                                        /* 20120910150204 afin de permettre, par exemple, de "convertir" une image unique            */
                                        /* (nombre_de_chiffres_A=0) en une sequence d'images (nombre_de_chiffres_R=4).               */
     DEFV(Int,INIT(numero_d_image,UNDEF));
                                        /* Numero de l'image courante.                                                               */
     DEFV(Logical,INIT(generer_la_composante_ROUGE,GENERER_LA_COMPOSANTE_ROUGE));
     DEFV(Logical,INIT(generer_la_composante_VERTE,GENERER_LA_COMPOSANTE_VERTE));
     DEFV(Logical,INIT(generer_la_composante_BLEUE,GENERER_LA_COMPOSANTE_BLEUE));
                                        /* Indicateurs precisant s'il faut genere ('VRAI') ou pas ('FAUX') la composante chromatique */
                                        /* correspondante...                                                                         */
     DEFV(Logical,INIT(translater_le_NOIR,TRANSLATER_LE_NOIR));
                                        /* Indique si le niveau 'NOIR' est translatable ou pas...                                    */
     DEFV(Int,INIT(increment_des_niveaux,INCREMENT_DES_NIVEAUX));
                                        /* Lorsque les niveaux doivent "tourner", on trouve ici l'increment des couleurs...          */
     /*..............................................................................................................................*/
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_C("Rouge=""RR=""ROUGE=",nom_imageRR);
                         GET_ARGUMENT_C("Verte=""VERTE=""RV=",nom_imageRV);
                         GET_ARGUMENT_C("RB=""Bleue=""BLEUE=",nom_imageRB);
                         GET_ARGUMENT_L("RVB=",generer_une_image_en_vraies_couleurs);
                         GET_ARGUMENT_C("paletteA=""palette=""pA=""p=",nom_paletteA);
                         GET_ARGUMENT_I("modulo=",translation_des_numeros_des_images);
                         GET_ARGUMENT_L("inverser=",inverser_l_ordre_de_recuperation_des_images);
                         GET_ARGUMENT_I("premiere=",premiere_image);
                         GET_ARGUMENT_I("derniere=",derniere_image);
                         GET_ARGUMENT_I("pas=",pas_des_images);

                         GET_ARGUMENT_L("periodique=",chain_numero_modulo_____effectif);
                         GET_ARGUMENT_I("origine=""o=",chain_numero_modulo_____origine);
                         GET_ARGUMENT_I("extremite=""e=",chain_numero_modulo_____extremite);
                                        /* Introduits le 20221212121359...                                                           */

                         GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);
                         GET_ARGUMENT_I("chiffresA=",nombre_de_chiffres_A);
                         GET_ARGUMENT_I("chiffresR=",nombre_de_chiffres_R);
                         GET_ARGUMENT_L("genereR=""gROUGE=",generer_la_composante_ROUGE);
                         GET_ARGUMENT_L("genereV=""gVERTE=",generer_la_composante_VERTE);
                         GET_ARGUMENT_L("genereB=""gBLEUE=",generer_la_composante_BLEUE);
                         GET_ARGUMENT_L("translater_le_NOIR=""noir=""NOIR=",translater_le_NOIR);
                         GET_ARGUMENT_I("increment=""i=",increment_des_niveaux);
                         )
                    );

     CALS(Iload_palette_de_couleurs(nom_paletteA,ESPACE_DE_COULEURS_RVB));
                                        /* Chargement de la palette de couleurs...                                                   */

     DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images)
          Bblock
          EGAL(nom_imagesA
              ,chain_Aconcaten2_sauf_nom_pipe(nom_imageA
                                             ,chain_numero_modulo(NUMERO_D_IMAGE,NOMBRE_DE_CHIFFRES_A)
                                              )
               );
                                        /* Le 20221212115852, 'chain_numero_modulo(...)' a remplace 'chain_numero(...)'...           */

          Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA,nom_imagesA))))
               Bblock
               PUSH_OPTIMISATION;
               SET_OPTIMISATION(VRAI);
                                        /* Afin de ne passer que par les listes de substitution...                                   */
               CALS(Ivraies_couleurs(Image_ROUGE,Image_VERTE,Image_BLEUE
                                    ,ImageA
                                    ,generer_la_composante_ROUGE,generer_la_composante_VERTE,generer_la_composante_BLEUE
                                    ,increment_des_niveaux
                                    ,translater_le_NOIR
                                     )
                    );
                                        /* Passage des fausses aux vraies couleurs via la palette courante.                          */
               PULL_OPTIMISATION;

               Test(IL_FAUT(generer_la_composante_ROUGE))
                    Bblock
                    GENERATION_D_UNE_COMPOSANTE(nom_imageRR,c_ROUGE,Image_ROUGE);
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(IL_FAUT(generer_la_composante_VERTE))
                    Bblock
                    GENERATION_D_UNE_COMPOSANTE(nom_imageRV,c_VERTE,Image_VERTE);
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(IL_FAUT(generer_la_composante_BLEUE))
                    Bblock
                    GENERATION_D_UNE_COMPOSANTE(nom_imageRB,c_BLEUE,Image_BLEUE);
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Test__CODE_ERREUR__ERREUR07;
               Eblock
          ETes
          CALZ_FreCC(nom_imagesA);
          Eblock
     EDoI

     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.