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