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