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