/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A C C E S   S I M P L E   A   U N E   I M A G E   A V E C   S U B S T I T U T I O N                                        */
/*        E T   T R O N C A G E   E V E N T U E L S  :                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Liste des substitutions disponibles :                                                                                      */
/*                                                                                                                                   */
/*                  'L_SUBSTITUTION_NEUTRE' :                                                                                        */
/*                                      definition de la liste de substitution standard ("1" pour "1"...).                           */
/*                  'L_SUBSTITUTION_01' :                                                                                            */
/*                                      definition de la liste de substitution [NOIR,FRA2(BLANC)], ou :                              */
/*                                      definition de la liste de substitution [GRO0(FRA2(BLANC)),GRO1(FRA2(BLANC))].                */
/*                  'L_SUBSTITUTION_02' :                                                                                            */
/*                                      definition de la liste de substitution [FRA2(BLANC),BLANC], ou :                             */
/*                                      definition de la liste de substitution [GRO1(FRA2(BLANC)),GRO2(FRA2(BLANC))].                */
/*                  'L_SUBSTITUTION_11' :                                                                                            */
/*                                      definition de la liste de substitution [NOIR,FRA4(BLANC)], ou :                              */
/*                                      definition de la liste de substitution [GRO0(FRA4(BLANC)),GRO1(FRA4(BLANC))].                */
/*                  'L_SUBSTITUTION_12' :                                                                                            */
/*                                      definition de la liste de substitution [FRA4(BLANC),FRA2(BLANC)], ou :                       */
/*                                      definition de la liste de substitution [GRO1(FRA4(BLANC)),GRO2(FRA4(BLANC))].                */
/*                  'L_SUBSTITUTION_13' :                                                                                            */
/*                                      definition de la liste de substitution [FRA2(BLANC),GRO3(FRA4(BLANC))], ou :                 */
/*                                      definition de la liste de substitution [GRO2(FRA4(BLANC)),GRO3(FRA4(BLANC))].                */
/*                  'L_SUBSTITUTION_14' :                                                                                            */
/*                                      definition de la liste de substitution [GRO3(FRA4(BLANC)),BLANC], ou :                       */
/*                                      definition de la liste de substitution [GRO3(FRA4(BLANC)),GRO4(FRA4(BLANC))].                */
/*                  'L_SUBSTITUTION_21' :                                                                                            */
/*                                      definition de la liste de substitution [GRO0(FRA8(BLANC)),GRO1(FRA8(BLANC))].                */
/*                  'L_SUBSTITUTION_22' :                                                                                            */
/*                                      definition de la liste de substitution [GRO1(FRA8(BLANC)),GRO2(FRA8(BLANC))].                */
/*                  'L_SUBSTITUTION_23' :                                                                                            */
/*                                      definition de la liste de substitution [GRO2(FRA8(BLANC)),GRO3(FRA8(BLANC))].                */
/*                  'L_SUBSTITUTION_24' :                                                                                            */
/*                                      definition de la liste de substitution [GRO3(FRA8(BLANC)),GRO4(FRA8(BLANC))].                */
/*                  'L_SUBSTITUTION_25' :                                                                                            */
/*                                      definition de la liste de substitution [GRO4(FRA8(BLANC)),GRO5(FRA8(BLANC))].                */
/*                  'L_SUBSTITUTION_26' :                                                                                            */
/*                                      definition de la liste de substitution [GRO5(FRA8(BLANC)),GRO6(FRA8(BLANC))].                */
/*                  'L_SUBSTITUTION_27' :                                                                                            */
/*                                      definition de la liste de substitution [GRO6(FRA8(BLANC)),GRO7(FRA8(BLANC))].                */
/*                  'L_SUBSTITUTION_28' :                                                                                            */
/*                                      definition de la liste de substitution [GRO7(FRA8(BLANC)),GRO8(FRA8(BLANC))].                */
/*                  'L_SUBSTITUTION_31' :                                                                                            */
/*                                      definition de la liste de substitution [GRO0(FRA16(BLANC)),GRO1(FRA16(BLANC))].              */
/*                  'L_SUBSTITUTION_32' :                                                                                            */
/*                                      definition de la liste de substitution [GRO1(FRA16(BLANC)),GRO2(FRA16(BLANC))].              */
/*                  'L_SUBSTITUTION_33' :                                                                                            */
/*                                      definition de la liste de substitution [GRO2(FRA16(BLANC)),GRO3(FRA16(BLANC))].              */
/*                  'L_SUBSTITUTION_34' :                                                                                            */
/*                                      definition de la liste de substitution [GRO3(FRA16(BLANC)),GRO4(FRA16(BLANC))].              */
/*                  'L_SUBSTITUTION_35' :                                                                                            */
/*                                      definition de la liste de substitution [GRO4(FRA16(BLANC)),GRO5(FRA16(BLANC))].              */
/*                  'L_SUBSTITUTION_36' :                                                                                            */
/*                                      definition de la liste de substitution [GRO5(FRA16(BLANC)),GRO6(FRA16(BLANC))].              */
/*                  'L_SUBSTITUTION_37' :                                                                                            */
/*                                      definition de la liste de substitution [GRO6(FRA16(BLANC)),GRO7(FRA16(BLANC))].              */
/*                  'L_SUBSTITUTION_38' :                                                                                            */
/*                                      definition de la liste de substitution [GRO7(FRA16(BLANC)),GRO8(FRA16(BLANC))].              */
/*                  'L_SUBSTITUTION_39' :                                                                                            */
/*                                      definition de la liste de substitution [GRO8(FRA16(BLANC)),GRO9(FRA16(BLANC))].              */
/*                  'L_SUBSTITUTION_3A' :                                                                                            */
/*                                      definition de la liste de substitution [GRO9(FRA16(BLANC)),GRO10(FRA16(BLANC))].             */
/*                  'L_SUBSTITUTION_3B' :                                                                                            */
/*                                      definition de la liste de substitution [GRO10(FRA16(BLANC)),GRO11(FRA16(BLANC))].            */
/*                  'L_SUBSTITUTION_3C' :                                                                                            */
/*                                      definition de la liste de substitution [GRO11(FRA16(BLANC)),GRO12(FRA16(BLANC))].            */
/*                  'L_SUBSTITUTION_3D' :                                                                                            */
/*                                      definition de la liste de substitution [GRO12(FRA16(BLANC)),GRO13(FRA16(BLANC))].            */
/*                  'L_SUBSTITUTION_3E' :                                                                                            */
/*                                      definition de la liste de substitution [GRO13(FRA16(BLANC)),GRO14(FRA16(BLANC))].            */
/*                  'L_SUBSTITUTION_3F' :                                                                                            */
/*                                      definition de la liste de substitution [GRO14(FRA16(BLANC)),GRO15(FRA16(BLANC))].            */
/*                  'L_SUBSTITUTION_3G' :                                                                                            */
/*                                      definition de la liste de substitution [GRO15(FRA16(BLANC)),GRO16(FRA16(BLANC))].            */
/*                  'L_SUBSTITUTION_FF' :                                                                                            */
/*                                      definition de la liste de substitution [NOIR,FRA1(FRA1(BLANC))].                             */
/*                  'L_SUBSTITUTION_FE' :                                                                                            */
/*                                      definition de la liste de substitution [NOIR,FRA1(FRA2(BLANC))].                             */
/*                  'L_SUBSTITUTION_FC' :                                                                                            */
/*                                      definition de la liste de substitution [NOIR,FRA1(FRA4(BLANC))].                             */
/*                  'L_SUBSTITUTION_F8' :                                                                                            */
/*                                      definition de la liste de substitution [NOIR,FRA1(FRA8(BLANC))].                             */
/*                  'L_SUBSTITUTION_F0' :                                                                                            */
/*                                      definition de la liste de substitution [NOIR,FRA1(FRA16(BLANC))].                            */
/*                  'L_SUBSTITUTION_E0' :                                                                                            */
/*                                      definition de la liste de substitution [NOIR,FRA2(FRA16(BLANC))].                            */
/*                  'L_SUBSTITUTION_C0' :                                                                                            */
/*                                      definition de la liste de substitution [NOIR,FRA4(FRA16(BLANC))].                            */
/*                  'L_SUBSTITUTION_80' :                                                                                            */
/*                                      definition de la liste de substitution [NOIR,FRA8(FRA16(BLANC))].                            */
/*                  'L_SUBSTITUTION_ROUGE' :                                                                                         */
/*                                      definition de la liste de coloriage ROUGE fournie en tant que palette Argument.              */
/*                  'L_SUBSTITUTION_VERTE' :                                                                                         */
/*                                      definition de la liste de coloriage VERTE fournie en tant que palette Argument.              */
/*                  'L_SUBSTITUTION_BLEUE' :                                                                                         */
/*                                      definition de la liste de coloriage BLEUE fournie en tant que palette Argument.              */
/*                  'L_SUBSTITUTION_SOLAR' :                                                                                         */
/*                                      definition de la liste de substitution d'acces au SOLAR.                                     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/substitue$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/substitue.01.I"

#define   SUBSTITUER_LE_NOIR                                                                                                            \
                    AUTORISE                                                                                                            \
                                        /* Indique si le NOIR peut etre substitue ('AUTORISE') ou s'il doit rester tel qu'il         */ \
                                        /* est ('INTERDIT').                                                                         */
#define   INCREMENT_DES_NIVEAUX                                                                                                         \
                    FZERO                                                                                                               \
                                        /* Lorsque les niveaux doivent "tourner", on trouve ici l'increment des couleurs...          */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/substitue.02.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A C C E S   S I M P L E   A   U N E   I M A G E   E T   S U B S T I T U T I O N   E V E N T U E L L E  :                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));

#include  xci/substitue.03.I"

     DEFV(Logical,INIT(substituer_le_NOIR,SUBSTITUER_LE_NOIR));
                                        /* Indique si le NOIR peut etre substitue ('AUTORISE') ou s'il doit rester tel qu'il         */
                                        /* est ('INTERDIT').                                                                         */
     DEFV(Float,INIT(increment_des_niveaux,INCREMENT_DES_NIVEAUX));
                                        /* Lorsque les niveaux doivent "tourner", on trouve ici l'increment des couleurs...          */
     /*..............................................................................................................................*/
     EGAL(CONVERSION_FLOTTANTE_D_UNE_LISTE_DE_SUBSTITUTION_____renormaliser,FAUX);
                                        /* Introduit le 20130114163858, cette valeur par defaut permet de laisser intact la liste de */
                                        /* substitution flottante generee par 'v $xiii/di_image$FON IFmove_avec_substitution'...     */

     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);
                         GET_ARGUMENT_L("standard=",les_images_sont_standards);

                         GET_ARGUMENT_P("bas=",seuil_bas);
                         GET_ARGUMENT_P("haut=",seuil_haut);

                         GET_ARGUMENT_C("substitution=""s=",nom_substitution);
                         GET_ARGUMENT_C("paletteA=""palette=""pA=""p=",nom_paletteA);
                         GET_ARGUMENT_L("translater_le_NOIR=""noir=""NOIR=",substituer_le_NOIR);
                         GET_ARGUMENT_F("increment=""i=",increment_des_niveaux);

                         GET_ARGUMENT_L("message_zones_plates=""mzp="
                                       ,IFmove_avec_substitution_____editer_le_message_des_zones_plates
                                        );
                                        /* Argument introduit le 20230419144947...                                                   */

                         GET_ARGUMENT_L("renormaliser=""r=",CONVERSION_FLOTTANTE_D_UNE_LISTE_DE_SUBSTITUTION_____renormaliser);
                                        /* Arguments introduits le 20130114163858...                                                 */
                         GET_ARGUMENT_L("forcer_extrema=""forcer=",IFmove_avec_substitution_____forcer_les_extrema);
                         GET_ARGUMENT_F("minimum=""min=",IFmove_avec_substitution_____niveau_minimum);
                         GET_ARGUMENT_F("maximum=""max=",IFmove_avec_substitution_____niveau_maximum);
                                        /* Arguments introduits le 20130114123240...                                                 */
                         GET_ARGUMENT_L("lissage=",IFmove_avec_substitution_____lissage);
                         GET_ARGUMENT_I("passes=",IFmove_avec_substitution_____nombre_de_passes_de_lissage);
                         GET_ARGUMENT_I("pl=""pas_lissage=",IFmove_avec_substitution_____PAS_COULEURS_de_lissage);
                         GET_ARGUMENT_I("pi=""pas_interpolation=",IFmove_avec_substitution_____PAS_COULEURS_d_interpolation);
                         GET_ARGUMENT_F("facteur=""derivees=",IFmove_avec_substitution_____facteur_des_derivees_numeriques);

                         GET_ARGUMENT_F("coefficient_n_m2=""nm2=",LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_m2);
                         GET_ARGUMENT_F("coefficient_n_m1=""nm1=",LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_m1);
                         GET_ARGUMENT_F("coefficient_n_0=""n0=",LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_0);
                         GET_ARGUMENT_F("coefficient_n_p1=""np1=",LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_p1);
                         GET_ARGUMENT_F("coefficient_n_p2=""np2=",LISSAGE_PAR_APPROXIMATION_PARABOLIQUE_____coefficient_de__n_p2);
                                        /* Arguments introduits le 20160604092005...                                                 */
                         )
                    );

     CALi(gInettoyage(les_images_sont_standards,ImageR,IFmageR));
                                        /* Initialisation de l'image Resultat.                                                       */

     REINITIALISATION_LISTE_DE_SUBSTITUTION;
                                        /* Cette initialisation exceptionnelle est due au fait que l'autorisation de substitution    */
                                        /* du niveau de NOIR peut etre modifiee ci-apres. Or 'INITIALISATION_LISTES_DE_SUBSTITUTION' */
                                        /* reinitialise la liste 'liste_d_autorisation_de_substitution_des_niveaux', donc on force   */
                                        /* ici 'INITIALISATION_LISTES_DE_SUBSTITUTION' pour qu'il ne soit pas fait dans la fonction  */
                                        /* 'Nsubstitution(...)'.                                                                     */

     Test(IL_FAUT(substituer_le_NOIR))
          Bblock
          AUTORISATION_DE_SUBSTITUTION_D_UN_NIVEAU(NOIR);
                                        /* Le NOIR sera substitue...                                                                 */
          Eblock
     ATes
          Bblock
          INTERDICTION_DE_SUBSTITUTION_D_UN_NIVEAU(NOIR);
                                        /* Le NOIR sera conserve en l'etat...                                                        */
          Eblock

     ETes

     Test(PAS_D_ERREUR(CODE_ERROR(gIload_image(les_images_sont_standards,ImageA,IFmageA,nom_imageA))))
          Bblock

#include  xci/substitue.04.I"

          Test(EST_VRAI(les_images_sont_standards))
               Bblock
                                        /* Cas d'une image 'image' :                                                                 */
               Test(IL_FAUT(IFmove_avec_substitution_____lissage))
                                        /* Test introduit le 20130114120630...                                                       */
                    Bblock
                    PRINT_ATTENTION("en mode 'standard', il n'y a pas de lissage");
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(IFNE(increment_des_niveaux,fINTE(increment_des_niveaux)))
                    Bblock
                    PRINT_ATTENTION("en mode 'standard', l'increment des niveaux doit etre entier");
                    CAL1(Prer1("il vaut %.^^^\n",increment_des_niveaux));
                                        /* Le 20060105155342, le format "16g" est passe a "^^g" pour plus de souplesse...            */
                                        /*                                                                                           */
                                        /* Le 20091123123303, le format "^^g" est passe a "^^^" pour plus de souplesse...            */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               CALS(Imove_avec_rotation_des_niveaux(ImageR,ImageA,INTE(increment_des_niveaux),substituer_le_NOIR));
                                        /* Substitution...                                                                           */
               Eblock
          ATes
               Bblock
                                        /* Cas d'une image 'imageF' :                                                                */
               Test(IFOU(IFOU(IFNE(seuil_bas,NOIR),IFNE(seuil_haut,BLANC))
                        ,IL_NE_FAUT_PAS(substituer_le_NOIR)
                         )
                    )
                    Bblock
                    PRINT_ATTENTION("en mode non 'standard', seule la substitution globale dans [NOIR,BLANC] est faite");
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(IFET(IL_NE_FAUT_PAS(IFmove_avec_substitution_____lissage)
                        ,IFNE(IFmove_avec_substitution_____nombre_de_passes_de_lissage
                             ,NOMBRE_DE_PASSES_DE_LISSAGE_DANS_IFmove_avec_substitution
                              )
                         )
                    )
                    Bblock
                    PRINT_ATTENTION("en mode non 'standard', les options 'passes=' et 'lissage=' ne sont pas utilisees correctement");
                    CAL1(Prer4("(dans le mode 'standard=%s', l'utilisation de 'passes=%d' (#%d) necessite 'lissage=%s')\n"
                              ,ETAT_LOGIQUE(NEUL(les_images_sont_standards))
                              ,IFmove_avec_substitution_____nombre_de_passes_de_lissage
                              ,NOMBRE_DE_PASSES_DE_LISSAGE_DANS_IFmove_avec_substitution
                              ,ETAT_LOGIQUE(NOTL(IFmove_avec_substitution_____lissage))
                               )
                         );
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               CALS(IFmove_avec_substitution(IFmageR,IFmageA,increment_des_niveaux));
                                        /* Substitution...                                                                           */
               Eblock
          ETes

#include  xci/substitue.06.I"
                                        /* Puis on desactive (introduit sous cette forme le 20081004190835...).                      */

          CALi(gIupdate_image(les_images_sont_standards,nom_imageR,ImageR,IFmageR));
          Eblock
     ATes
          Bblock
          Test__CODE_ERREUR__ERREUR07;
          Eblock
     ETes

     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.