_______________________________________________________________________________________________________________________________________
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P R I M I T I V E S   D ' A C C E S   A U X   P I X E L S   S O U S   F O R M E   D E   " F O N C T I O N S "  :           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Dans ce fichier se trouvent toutes les                                                                         */
/*                  primitives d'acces aux pixels d'une                                                                              */
/*                  image raster ; elles sont exprimees                                                                              */
/*                  sous forme de fonctions ce qui fait                                                                              */
/*                  que la duree d'execution par rapport                                                                             */
/*                  aux "defines" est tres allongee...                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        N O T A T I O N S  :                                                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    On notera 'imageA' les images Arguments,                                                                       */
/*                  et 'imageR' les images Resultats ; 'arg'                                                                         */
/*                  designera des arguments, et 'Vf' une                                                                             */
/*                  fonction "variable"...                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xiipf/fonction.1$FON' :                                                                                        */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 19870000000000).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N   N E U T R E  :                                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VNEUT(argument)))
DEFV(Argument,DEFV(genere_p,argument));
                                        /* Argument.                                                                                 */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(NEUT(argument));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E N V O I    D U   P R E M I E R   A R G U M E N T  :                                                                    */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VNEUTRE1(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(arg1);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E N V O I    D U   D E U X I E M E   A R G U M E N T  :                                                                  */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VNEUTRE2(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(arg2);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E N V O I    D U   D E U X I E M E   A R G U M E N T   ( P L U S   S I M P L E )  :                                      */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VNEUTRE(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(VNEUTRE2(arg1,arg2));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V A L E U R   A B S O L U E   D ' U N E   V A L E U R  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VABS(argument)))
DEFV(Argument,DEFV(genere_p,argument));
                                        /* Argument.                                                                                 */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(ABSO(argument));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A D D I T I O N   D E   D E U X   V A L E U R S  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VADD(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(ADD2(arg1,arg2));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S O U S T R A C T I O N   D E   D E U X   V A L E U R S  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VSUB(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(SOUS(arg1,arg2));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O M P L E M E N T A T I O N   D ' U N E   V A L E U R  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VCOMP(argument)))
DEFV(Argument,DEFV(genere_p,argument));
                                        /* Argument.                                                                                 */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(SOUS(BLANC,argument));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M U L T I P L I C A T I O N   D E   D E U X   V A L E U R S  :                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VMUL(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(MUL2(arg1,arg2));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M U L T I P L I C A T I O N   D E   D E U X   V A L E U R S   ( F L O T T A N T E   E T   E N T I E R E )  :               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VMULF(arg1,arg2)))
DEFV(Argument,DEFV(Float,arg1));
                                        /* Premier argument (flottant).                                                              */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument (entier).                                                               */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(MUL2(arg1,arg2));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I V I S I O N   D E   D E U X   V A L E U R S  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VDIV(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument (dividende).                                                             */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument (diviseur).                                                             */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(genere_p,INIT(resultat,NIVEAU_UNDEF));
                                        /* Variable de manoeuvre.                                                                    */
     /*..............................................................................................................................*/
     Test(IZEQ(arg2))
          Bblock
          PRINT_ATTENTION("division par zero");
          EGAL(resultat,NIVEAU_UNDEF);
          Eblock
     ATes
          Bblock
          Eblock
     ETes
     Test(IZNE(arg2))
          Bblock
          EGAL(resultat,DIVI(arg1,arg2));
          Eblock
     ATes
          Bblock
          Eblock
     ETes
     RETU(resultat);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A X I M U M   D E   D E U X   V A L E U R S   ( " O U "   F L O U )  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VMAX(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(MAX2(arg1,arg2));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M I N I M U M   D E   D E U X   V A L E U R S   ( " E T "   F L O U )  :                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VMIN(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(MIN2(arg1,arg2));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        " O U "   E X C L U S I F   F L O U   D E   D E U X   V A L E U R S  :                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VMINMAX(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(VMAX(VMIN(arg1,VCOMP(arg2)),VMIN(VCOMP(arg1),arg2)));
     Eblock

EFonctionP

#if       ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N V E R S I O N   D ' U N E   V A L E U R  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VINVERT(argument)))
DEFV(Argument,DEFV(genere_p,argument));
                                        /* Argument.                                                                                 */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(OUEX(BLANC,argument));
     Eblock

EFonctionP

#Aif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
#Eif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */

#if       ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        ' O R '   D E   D E U X   V A L E U R S  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VOR(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(OUIN(arg1,arg2));
     Eblock

EFonctionP

#Aif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
#Eif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */

#if       ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        ' A N D '   D E   D E U X   V A L E U R S  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VAND(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(ETLO(arg1,arg2));
     Eblock

EFonctionP

#Aif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
#Eif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */

#if       ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        ' E O R '   D E   D E U X   V A L E U R S  :                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,VEOR(arg1,arg2)))
DEFV(Argument,DEFV(genere_p,arg1));
                                        /* Premier argument.                                                                         */
DEFV(Argument,DEFV(genere_p,arg2));
                                        /* Deuxieme argument.                                                                        */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(OUEX(arg1,arg2));
     Eblock

EFonctionP

#Aif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
#Eif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V A L I D A T I O N   D E S   C O O R D O N N E E S   E T   A C T I O N  :                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   ValP(portee_du_masquage,acces_point,point_hors_ecran,point_masque)                                                            \
                    Bblock                                                                                                              \
                    Test(TEST_HORS_IMAGE(X,Y))                                                                                          \
                         Bblock                                                                                                         \
                         point_hors_ecran;                                                                                              \
                                        /* Le point argument {X,Y} est hors ecran...                                                 */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Test(TEST_MASQUE_ACTIF(X,Y,portee_du_masquage))                                                                \
                              Bblock                                                                                                    \
                              acces_point;                                                                                              \
                                        /* Le point argument {X,Y} est dans l'ecran et non masque.                                   */ \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              point_masque;                                                                                             \
                                        /* Le masque est actif et le point argument {X,Y} est dans l'ecran mais masque.              */ \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " S T A N D A R D "  :                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,load_point(imageA,X,Y)))
DEFV(Argument,DEFV(image,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(genere_p,INIT(point,NIVEAU_UNDEF));
                                        /* Valeur du point courant.                                                                  */
     /*..............................................................................................................................*/
     ValP(MASQUER_LOAD
         ,EGAL(point
              ,COND(EST_INACTIF_FILTRAGE
                   ,IMAGE(imageA,X,Y)
                   ,Nsubstitution_inverse(IMAGE(imageA,X,Y))
                    )
               );
         ,EGAL(point,NIVEAU_HORS_ECRAN);
         ,EGAL(point,NIVEAU_MASQUE);
          );
     RETU(point);
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " S T A N D A R D "   E T   V A L I D A T I O N  :                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionP

DEFV(Common,DEFV(FonctionP,load_point_valide(imageA,X,Y)))
DEFV(Argument,DEFV(image,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(load_point(imageA,X,Y));
     Eblock

EFonctionP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " C H A R "  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionC

DEFV(Common,DEFV(FonctionC,loadC_point(imageA,X,Y)))
DEFV(Argument,DEFV(imageC,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIT(point,NIVEAU_UNDEF));
                                        /* Valeur du point courant.                                                                  */
     /*..............................................................................................................................*/
     ValP(MASQUER_LOAD
         ,EGAL(point,IMAGE(imageA,X,Y));
         ,EGAL(point,NIVEAU_HORS_ECRAN);
         ,EGAL(point,NIVEAU_MASQUE);
          );
     RETU(point);
     Eblock

EFonctionC

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " C H A R "    E T   V A L I D A T I O N  :                                    */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionC

DEFV(Common,DEFV(FonctionC,loadC_point_valide(imageA,X,Y)))
DEFV(Argument,DEFV(imageC,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(loadC_point(imageA,X,Y));
     Eblock

EFonctionC

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " I N T "  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,loadI_point(imageA,X,Y)))
DEFV(Argument,DEFV(imageI,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Int,INIT(point,NIVEAU_UNDEF));
                                        /* Valeur du point courant.                                                                  */
     /*..............................................................................................................................*/
     ValP(MASQUER_LOAD
         ,EGAL(point,IMAGE(imageA,X,Y));
         ,EGAL(point,NIVEAU_HORS_ECRAN);
         ,EGAL(point,NIVEAU_MASQUE);
          );
     RETU(point);
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " I N T "   E T   V A L I D A T I O N  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,loadI_point_valide(imageA,X,Y)))
DEFV(Argument,DEFV(imageI,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(loadI_point(imageA,X,Y));
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O A T "  :                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,loadF_point(imageA,X,Y)))
DEFV(Argument,DEFV(imageF,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(genere_Float,INIT(point,FLOT__NIVEAU_UNDEF));
                                        /* Valeur du point courant.                                                                  */
     /*..............................................................................................................................*/
     ValP(MASQUER_LOAD
         ,EGAL(point,IMAGE(imageA,X,Y));
         ,EGAL(point,NIVEAU_HORS_ECRAN);
         ,EGAL(point,NIVEAU_MASQUE);
          );
     RETU(point);
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H A R G E M E N T   D ' U N   P O I N T   " F L O A T "   E T   V A L I D A T I O N  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionF

DEFV(Common,DEFV(FonctionF,loadF_point_valide(imageA,X,Y)))
DEFV(Argument,DEFV(imageF,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     RETU(loadF_point(imageA,X,Y));
     Eblock

EFonctionF

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R A N G E M E N T   D ' U N   P O I N T   " S T A N D A R D "  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,store_point(valeur,imageA,X,Y,ARGUMENT_FONCTION(Vf))))
DEFV(Argument,DEFV(genere_p,valeur));
                                        /* Valeur a donner au point argument (a quelque chose pres...).                              */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(genere_p,afPOINTEUR(Vf)));
                                        /* Fonction a appliquer pour ranger le point ;                                               */
                                        /* on realise le calcul suivant :                                                            */
                                        /* imageA[X][Y] = Vf(imageA[X][Y],valeur),                                                   */
                                        /* ou "Vf" est l'une des fonctions sur valeur (FVARIABLE, FNEUTRE, FADD,...).                */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     DEFV(genere_p,Ncalibrage());
                                        /* Fonction de calibrage du niveau resultant de "Vf".                                        */
                                        /* ATTENTION : pour des raisons pragmatiques, le "calibrage" n'est applique que pour         */
                                        /* l'operation de rangement "standard", de meme pour la "substitution"                       */
                                        /* et l'"ecrasement" !!!                                                                     */
     /*..............................................................................................................................*/
     ValP(MASQUER_STORE
         ,BLOC(Test(EST_INACTIF_FILTRAGE)
                    Bblock
                    EGAL(IMAGE(imageA,X,Y),valeur);
                    Eblock
               ATes
                    Bblock
                    Test(EST_AUTORISE(Necrasement(load_point(imageA,X,Y))))
                         Bblock
                         EGAL(IMAGE(imageA,X,Y)
                             ,Nsubstitution(Ncalibrage(fPOINTEUR(Vf)(load_point(imageA,X,Y),valeur)))
                              );
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ETes
               )
         ,BLOC(CODE_ERROR(ERREUR06);
               )
         ,BLOC(VIDE;
               )
          );
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R A N G E M E N T   D ' U N   P O I N T   " S T A N D A R D "   E T   V A L I D A T I O N  :                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,store_point_valide(valeur,imageA,X,Y,ARGUMENT_FONCTION(Vf))))
DEFV(Argument,DEFV(genere_p,valeur));
                                        /* Valeur a donner au point argument (a quelque chose pres...).                              */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(genere_p,afPOINTEUR(Vf)));
                                        /* Fonction a appliquer pour ranger le point ;                                               */
                                        /* on realise le calcul suivant :                                                            */
                                        /* imageA[X][Y] = Vf(imageA[X][Y],valeur),                                                   */
                                        /* ou "Vf" est l'une des fonctions sur valeur (FVARIABLE, FNEUTRE, FADD,...).                */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(valeur,imageA,X,Y,Vf);
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R A N G E M E N T   D ' U N   P O I N T   " C H A R "  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,storeC_point(valeur,imageA,X,Y)))
DEFV(Argument,DEFV(genere_CHAR,valeur));
                                        /* Valeur a donner au point argument (a quelque chose pres...).                              */
DEFV(Argument,DEFV(imageC,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
                                        /* Nota : la fonction 'Vf' n'est pas utilisee car le type de ses arguments                   */
                                        /* est variable, alors qu'il est fixe dans son corps ('genere_p').                           */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     ValP(MASQUER_STORE
         ,EGAL(IMAGE(imageA,X,Y)
              ,CAST_CHAR(valeur)
               );
                                        /* La procedure 'CAST_CHAR(...)' a remplace un 'CAST(genere_CHAR,...)' le 20090331101601.    */
         ,CODE_ERROR(ERREUR06);
         ,VIDE;
          );
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R A N G E M E N T   D ' U N   P O I N T   " C H A R "   E T   V A L I D A T I O N  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,storeC_point_valide(valeur,imageA,X,Y)))
DEFV(Argument,DEFV(genere_CHAR,valeur));
                                        /* Valeur a donner au point argument (a quelque chose pres...).                              */
DEFV(Argument,DEFV(imageC,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
                                        /* Nota : la fonction 'Vf' n'est pas utilisee car le type de ses arguments                   */
                                        /* est variable, alors qu'il est fixe dans son corps ('genere_p').                           */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     storeC_point(valeur,imageA,X,Y);
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R A N G E M E N T   D ' U N   P O I N T   " I N T "  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,storeI_point(valeur,imageA,X,Y)))
DEFV(Argument,DEFV(genere_Int,valeur));
                                        /* Valeur a donner au point argument (a quelque chose pres...).                              */
DEFV(Argument,DEFV(imageI,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
                                        /* Nota : la fonction 'Vf' n'est pas utilisee car le type de ses arguments                   */
                                        /* est variable, alors qu'il est fixe dans son corps ('genere_p').                           */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     ValP(MASQUER_STORE
         ,EGAL(IMAGE(imageA,X,Y)
              ,CASP_Int(valeur)
               );
                                        /* La procedure 'CASP_Int(...)' a remplace un 'CASP(genere_Int,...)' le 20090331103604.      */
         ,CODE_ERROR(ERREUR06);
         ,VIDE;
          );
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R A N G E M E N T   D ' U N   P O I N T   " I N T "   E T   V A L I D A T I O N  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,storeI_point_valide(valeur,imageA,X,Y)))
DEFV(Argument,DEFV(genere_Int,valeur));
                                        /* Valeur a donner au point argument (a quelque chose pres...).                              */
DEFV(Argument,DEFV(imageI,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
                                        /* Nota : la fonction 'Vf' n'est pas utilisee car le type de ses arguments                   */
                                        /* est variable, alors qu'il est fixe dans son corps ('genere_p').                           */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     storeI_point(valeur,imageA,X,Y);
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R A N G E M E N T   D ' U N   P O I N T   " F L O A T "  :                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,storeF_point(valeur,imageA,X,Y)))
DEFV(Argument,DEFV(genere_Float,valeur));
                                        /* Valeur a donner au point argument (a quelque chose pres...).                              */
DEFV(Argument,DEFV(imageF,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
                                        /* Nota : la fonction 'Vf' n'est pas utilisee car le type de ses arguments                   */
                                        /* est variable, alors qu'il est fixe dans son corps ('genere_p').                           */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     ValP(MASQUER_STORE
         ,EGAL(IMAGE(imageA,X,Y)
              ,CASP_Float(valeur)
               );
                                        /* La procedure 'CASP_Float(...)' a remplace un 'CASP(genere_Float,...)' le 20090331103604.  */
         ,CODE_ERROR(ERREUR06);
         ,VIDE;
          );
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R A N G E M E N T   D ' U N   P O I N T   " F L O A T "   E T   V A L I D A T I O N  :                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,storeF_point_valide(valeur,imageA,X,Y)))
DEFV(Argument,DEFV(genere_Float,valeur));
                                        /* Valeur a donner au point argument (a quelque chose pres...).                              */
DEFV(Argument,DEFV(imageF,imageA));
                                        /* Image contenant le point argument.                                                        */
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
                                        /* Nota : la fonction 'Vf' n'est pas utilisee car le type de ses arguments                   */
                                        /* est variable, alors qu'il est fixe dans son corps ('genere_p').                           */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     storeF_point(valeur,imageA,X,Y);
     RETU_ERROR;
     Eblock

EFonctionI

#undef    ValP

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        V A L E U R   A B S O L U E   D ' U N   P O I N T  :                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,PABS(X,Y,imageA,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image Argument.                                                                           */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que : imageR[X][Y]=min(imageA1[X][Y],imageA2[X][Y]).                */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(VABS(load_point(imageA,X,Y)),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O M P L E M E N T A T I O N   D ' U N   P O I N T  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,PCOMP(X,Y,imageA,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image Argument.                                                                           */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que : imageR[X][Y]=BLANC-imageA[X][Y].                              */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
          store_point(VCOMP(load_point(imageA,X,Y)),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        A D D I T I O N   D E   D E U X   P O I N T S  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,PADD(X,Y,imageA1,imageA2,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(image,imageA1));
                                        /* Image Argument 1.                                                                         */
DEFV(Argument,DEFV(image,imageA2));
                                        /* Image Argument 2.                                                                         */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que : imageR[X][Y]=imageA1[X][Y]+imageA2[X][Y].                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(VADD(load_point(imageA1,X,Y),load_point(imageA2,X,Y)),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R P O L A T I O N   E N T R E   D E U X   P O I N T S  :                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,PINTER(X,Y,alpha,imageA1,beta,imageA2,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(Float,alpha));
                                        /* Premier coefficient d'interpolation.                                                      */
DEFV(Argument,DEFV(image,imageA1));
                                        /* Image Argument 1.                                                                         */
DEFV(Argument,DEFV(Float,beta));
                                        /* Second coefficient d'interpolation.                                                       */
DEFV(Argument,DEFV(image,imageA2));
                                        /* Image Argument 2.                                                                         */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que : imageR[X][Y]=alpha*imageA1[X][Y]+beta*imageA2[X][Y].          */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(VADD(VMULF(alpha,load_point(imageA1,X,Y)),VMULF(beta,load_point(imageA2,X,Y))),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N C R E M E N T A T I O N   D ' U N E   P O I N T  :                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,PINC(X,Y,imageA,increment,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image argument.                                                                           */
DEFV(Argument,DEFV(Int,increment));
                                        /* Increment (positif ou negatif).                                                           */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image resultat, telle que : imageR[X][Y]=imageA[X][Y]+increment.                          */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(VADD(load_point(imageA,X,Y),increment),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S O U S T R A C T I O N   D E   D E U X   P O I N T S  :                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,PSUB(X,Y,imageA1,imageA2,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(image,imageA1));
                                        /* Image Argument 1.                                                                         */
DEFV(Argument,DEFV(image,imageA2));
                                        /* Image Argument 2.                                                                         */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que : imageR[X][Y]=imageA1[X][Y]-imageA2[X][Y].                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(VSUB(load_point(imageA1,X,Y),load_point(imageA2,X,Y)),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M U L T I P L I C A T I O N   D E   D E U X   P O I N T S  :                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,PMUL(X,Y,imageA1,imageA2,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(image,imageA1));
                                        /* Image Argument 1.                                                                         */
DEFV(Argument,DEFV(image,imageA2));
                                        /* Image Argument 2.                                                                         */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que : imageR[X][Y]=imageA1[X][Y]*imageA2[X][Y].                     */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(VMUL(load_point(imageA1,X,Y),load_point(imageA2,X,Y)),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M U L T I P L I C A T I O N   D ' U N   P O I N T   P A R   U N   F L O T T A N T  :                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,PMULF(X,Y,facteur,imageA1,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(Float,facteur));
                                        /* Facteur d'echelle.                                                                        */
DEFV(Argument,DEFV(image,imageA1));
                                        /* Image Argument.                                                                           */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que : imageR[X][Y]=facteur*imageA1[X][Y].                           */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(VMULF(facteur,load_point(imageA1,X,Y)),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I V I S I O N   D E   D E U X   P O I N T S  :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,PDIV(X,Y,imageA1,imageA2,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(image,imageA1));
                                        /* Image Argument 1.                                                                         */
DEFV(Argument,DEFV(image,imageA2));
                                        /* Image Argument 2.                                                                         */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que : imageR[X][Y]=imageA1[X][Y]/imageA2[X][Y] sans                 */
                                        /* entreprendre d'actions particulieres au cas ou le diviseur serait                         */
                                        /* nul si ce n'est le signaler et donner la valeur "NIVEAU_UNDEF" a l'element                */
                                        /* correspondants...                                                                         */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(VDIV(load_point(imageA1,X,Y),load_point(imageA2,X,Y)),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A X I M U M   D E   D E U X   P O I N T S  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,PMAX(X,Y,imageA1,imageA2,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(image,imageA1));
                                        /* Image Argument 1.                                                                         */
DEFV(Argument,DEFV(image,imageA2));
                                        /* Image Argument 2.                                                                         */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que : imageR[X][Y]=max(imageA1[X][Y],imageA2[X][Y]).                */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(VMAX(load_point(imageA1,X,Y),load_point(imageA2,X,Y)),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M I N I M U M   D E   D E U X   P O I N T S  :                                                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,PMIN(X,Y,imageA1,imageA2,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(image,imageA1));
                                        /* Image Argument 1.                                                                         */
DEFV(Argument,DEFV(image,imageA2));
                                        /* Image Argument 2.                                                                         */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que : imageR[X][Y]=min(imageA1[X][Y],imageA2[X][Y]).                */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(VMIN(load_point(imageA1,X,Y),load_point(imageA2,X,Y)),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        " O U "   E X C L U S I F   F L O U   D E   D E U X   P O I N T S  :                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,PMINMAX(X,Y,imageA1,imageA2,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(image,imageA1));
                                        /* Image Argument 1.                                                                         */
DEFV(Argument,DEFV(image,imageA2));
                                        /* Image Argument 2.                                                                         */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que :                                                               */
                                        /*                                                                                           */
                                        /*                  imageR[X][Y]=max(min(comp(imageA1[X][Y]),imageA2[X][Y]),                 */
                                        /*                                   min(imageA1[X][Y],comp(imageA2[X][Y]))).                */
                                        /*                                                                                           */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(VMINMAX(load_point(imageA1,X,Y),load_point(imageA2,X,Y)),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

#if       ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N V E R S I O N   D ' U N   P O I N T  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,PINVERT(X,Y,imageA,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(image,imageA));
                                        /* Image Argument.                                                                           */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que : imageR[X][Y]=.NOT.imageA[X][Y].                               */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(VINVERT(load_point(imageA,X,Y)),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

#Aif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
#Eif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */

#if       ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        ' O R '   D E   D E U X   P O I N T S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,POR(X,Y,imageA1,imageA2,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(image,imageA1));
                                        /* Image Argument 1.                                                                         */
DEFV(Argument,DEFV(image,imageA2));
                                        /* Image Argument 2.                                                                         */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que : imageR[X][Y]=imageA1[X][Y].OR.imageA2[X][Y].                  */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(VOR(load_point(imageA1,X,Y),load_point(imageA2,X,Y)),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

#Aif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
#Eif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */

#if       ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        ' A N D '   D E   D E U X   P O I N T S  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,PAND(X,Y,imageA1,imageA2,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(image,imageA1));
                                        /* Image Argument 1.                                                                         */
DEFV(Argument,DEFV(image,imageA2));
                                        /* Image Argument 2.                                                                         */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que : imageR[X][Y]=imageA1[X][Y].AND.imageA2[X][Y].                 */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(VAND(load_point(imageA1,X,Y),load_point(imageA2,X,Y)),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

#Aif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
#Eif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */

#if       ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        ' E O R '   D E   D E U X   P O I N T S  :                                                                                 */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

BFonctionI

DEFV(Common,DEFV(FonctionI,PEOR(X,Y,imageA1,imageA2,imageR)))
DEFV(Argument,DEFV(Int,X));
DEFV(Argument,DEFV(Int,Y));
                                        /* Coordonnees {X,Y} du point argument.                                                      */
DEFV(Argument,DEFV(image,imageA1));
                                        /* Image Argument 1.                                                                         */
DEFV(Argument,DEFV(image,imageA2));
                                        /* Image Argument 2.                                                                         */
DEFV(Argument,DEFV(image,imageR));
                                        /* Image Resultat, telle que : imageR[X][Y]=imageA1[X][Y].EOR.imageA2[X][Y].                 */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     INIT_ERROR;
     /*..............................................................................................................................*/
     store_point(VEOR(load_point(imageA1,X,Y),load_point(imageA2,X,Y)),imageR,X,Y,FVARIABLE);
     RETU_ERROR;
     Eblock

EFonctionI

#Aif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */
#Eif      ((Format_p==Format_char)||(Format_p==Format_int)) /* Common,DEFV(Fonction,) : la generation depend des conditions...       */

_______________________________________________________________________________________________________________________________________



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.