/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        L I N E A R I S A T I O N   D E   L A   L U M I N A N C E   D ' U N E   P A L E T T E  :                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*                    Cette commande prend une palette                                                                               */
/*                  et en linearise la luminance...                                                                                  */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xciP/LINEARISATION_LUMINANCE$K' :                                                                              */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20240328164905).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

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

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   PAS_DES_NIVEAUX_ROUGE                                                                                                         \
                    FRA10(LUMINANCE_DU_ROUGE)
#define   PAS_DES_NIVEAUX_VERTE                                                                                                         \
                    FRA10(LUMINANCE_DU_VERTE)
#define   PAS_DES_NIVEAUX_BLEUE                                                                                                         \
                    FRA10(LUMINANCE_DU_BLEUE)


/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        L I N E A R I S A T I O N   D E   L A   L U M I N A N C E   D ' U N E   P A L E T T E  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_paletteA),NOM_PIPE));
                                        /* Nom de la palette Argument a utiliser.                                                    */
     DEFV(CHAR,INIC(POINTERc(nom_paletteR),NOM_PIPE));
                                        /* Nom de la palette Resultat a generer.                                                     */

     DEFV(Float,INIT(pas_des_niveaux_ROUGE,PAS_DES_NIVEAUX_ROUGE));
     DEFV(Float,INIT(pas_des_niveaux_VERTE,PAS_DES_NIVEAUX_VERTE));
     DEFV(Float,INIT(pas_des_niveaux_BLEUE,PAS_DES_NIVEAUX_BLEUE));
                                        /* Pas d'incrementation des niveaux {ROUGE,VERTE,BLEUE}.                                     */
     /*..............................................................................................................................*/
     GET_ARGUMENTSf(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("paletteA=""pA=",nom_paletteA);
                         GET_ARGUMENT_C("paletteR=""pR=",nom_paletteR);

                         GET_ARGUMENT_F("pas_ROUGE=""pasR=",pas_des_niveaux_ROUGE);
                         GET_ARGUMENT_F("pas_VERTE=""pasV=",pas_des_niveaux_VERTE);
                         GET_ARGUMENT_F("pas_BLEUE=""pasB=",pas_des_niveaux_BLEUE);
                         )
                    );

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

     begin_nouveau_block
          Bblock
          DEFV(Float,INIT(luminance_NOIR_
                         ,CALCUL_DE_LA_LUMINANCE(ACCES_listes_de_substitution(L_SUBSTITUTION_ROUGE,NOIR)
                                                ,ACCES_listes_de_substitution(L_SUBSTITUTION_VERTE,NOIR)
                                                ,ACCES_listes_de_substitution(L_SUBSTITUTION_BLEUE,NOIR)
                                                 )
                          )
               );
          DEFV(Float,INIT(luminance_BLANC
                         ,CALCUL_DE_LA_LUMINANCE(ACCES_listes_de_substitution(L_SUBSTITUTION_ROUGE,BLANC)
                                                ,ACCES_listes_de_substitution(L_SUBSTITUTION_VERTE,BLANC)
                                                ,ACCES_listes_de_substitution(L_SUBSTITUTION_BLEUE,BLANC)
                                                 )
                          )
               );
          DEFV(Float,INIT(pente_de_la_luminance,FLOT__UNDEF));

          EGAL(pente_de_la_luminance,DIVI(SOUS(luminance_BLANC,luminance_NOIR_),FLOT(SOUS(BLANC,NOIR))));

          BoIn(niveau,NOIR,BLANC,PAS_COULEURS)
               Bblock
               DEFV(genere_p,INIT(niveau_ROUGE,ACCES_listes_de_substitution(L_SUBSTITUTION_ROUGE,niveau)));
               DEFV(genere_p,INIT(niveau_VERTE,ACCES_listes_de_substitution(L_SUBSTITUTION_VERTE,niveau)));
               DEFV(genere_p,INIT(niveau_BLEUE,ACCES_listes_de_substitution(L_SUBSTITUTION_BLEUE,niveau)));

               DEFV(Float,INIT(luminance_courante__,FLOT__UNDEF));
               DEFV(Float,INIT(luminance_linearisee,FLOT__UNDEF));

               EGAL(luminance_courante__,CALCUL_DE_LA_LUMINANCE(niveau_ROUGE,niveau_VERTE,niveau_BLEUE));
               EGAL(luminance_linearisee,AXPB(pente_de_la_luminance,niveau,luminance_NOIR_));

               Test(IFGT(SOUA(luminance_courante__,luminance_linearisee),FU))
                    Bblock
                    DEFV(Logical,INIT(iterer,VRAI));

                    DEFV(Float,INIT(nouveau_niveau_ROUGE,FLOT(niveau_ROUGE)));
                    DEFV(Float,INIT(nouveau_niveau_VERTE,FLOT(niveau_VERTE)));
                    DEFV(Float,INIT(nouveau_niveau_BLEUE,FLOT(niveau_BLEUE)));

                    DEFV(Float,INIT(sens,COND(IFGT(luminance_linearisee,luminance_courante__),NEUT(FU),NEGA(FU))));

                    DEFV(Float,INIT(pas_effectif_des_niveaux_ROUGE,FLOT__UNDEF));
                    DEFV(Float,INIT(pas_effectif_des_niveaux_VERTE,FLOT__UNDEF));
                    DEFV(Float,INIT(pas_effectif_des_niveaux_BLEUE,FLOT__UNDEF));

                    EGAL(pas_effectif_des_niveaux_ROUGE,MUL2(sens,pas_des_niveaux_ROUGE));
                    EGAL(pas_effectif_des_niveaux_VERTE,MUL2(sens,pas_des_niveaux_VERTE));
                    EGAL(pas_effectif_des_niveaux_BLEUE,MUL2(sens,pas_des_niveaux_BLEUE));

                    Tant(IL_FAUT(iterer))
                         Bblock
                         EGAL(luminance_courante__
                             ,CALCUL_DE_LA_LUMINANCE(nouveau_niveau_ROUGE,nouveau_niveau_VERTE,nouveau_niveau_BLEUE)
                              );

                         Test(IFLE(SOUA(luminance_courante__,luminance_linearisee),FU))
                              Bblock
                              EGAL(iterer,FAUX);
                              Eblock
                         ATes
                              Bblock
                              EGAL(nouveau_niveau_ROUGE
                                  ,TRON(ADD2(nouveau_niveau_ROUGE,pas_effectif_des_niveaux_ROUGE),FLOT__NOIR,FLOT__BLANC)
                                   );
                              EGAL(nouveau_niveau_VERTE
                                  ,TRON(ADD2(nouveau_niveau_VERTE,pas_effectif_des_niveaux_VERTE),FLOT__NOIR,FLOT__BLANC)
                                   );
                              EGAL(nouveau_niveau_BLEUE
                                  ,TRON(ADD2(nouveau_niveau_BLEUE,pas_effectif_des_niveaux_BLEUE),FLOT__NOIR,FLOT__BLANC)
                                   );
                              Eblock
                         ETes
                         Eblock
                    ETan

                    EGAL(ACCES_listes_de_substitution(L_SUBSTITUTION_ROUGE,niveau),GENP(nouveau_niveau_ROUGE));
                    EGAL(ACCES_listes_de_substitution(L_SUBSTITUTION_VERTE,niveau),GENP(nouveau_niveau_VERTE));
                    EGAL(ACCES_listes_de_substitution(L_SUBSTITUTION_BLEUE,niveau),GENP(nouveau_niveau_BLEUE));
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          EBoI
          Eblock
     end_nouveau_block

     CALS(Iupdate_palette_de_couleurs(nom_paletteR,ESPACE_DE_COULEURS_RVB));
                                        /* Mise a jour de la palette de couleurs...                                                  */

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2024-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2024-2024.