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