/*************************************************************************************************************************************/ /* */ /* T R A N S P A R E N C E D ' U N E I M A G E A T R A V E R S U N E A U T R E : */ /* */ /* */ /* Definition : */ /* */ /* Cette commande genere une image */ /* dont le nom est le premier argument */ /* d'appel ; elle est le resultat de */ /* la transparence de l'image Argument */ /* vue a travers la Vitre a l'aide */ /* d'un seuil. */ /* */ /* */ /* Author of '$xci/vitre.12$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1988??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R F A C E ' listG ' : */ /* */ /* */ /* :Debut_listG: */ /* :Fin_listG: */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I C H I E R S D ' I N C L U D E S : */ /* */ /*************************************************************************************************************************************/ #include INCLUDES_BASE /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define SEUIL_DE_MASQUAGE \ GRIS \ /* Seuil de selection du trace initialise sur sa valeur par defaut. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* E X E C U T I O N D E L A T R A N S P A R E N C E : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageV),NOM_PIPE)); DEFV(genere_p,INIT(seuil_de_masquage,SEUIL_DE_MASQUAGE)); /* Seuil de selection du trace initialise sur sa valeur par defaut. */ DEFV(deltaF_2D,translation); /* Translation verticale d'empilement des nuages... */ /*..............................................................................................................................*/ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA); GET_ARGUMENT_C("imageV=""V=",nom_imageV); GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_P("seuil=""s=",seuil_de_masquage); ) ); CALi(Inoir(ImageR)); /* Initialisation de l'image Resultat. */ Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA2,nom_imageA)))) Bblock /* A2 = image d'arriere-plan (appelee "montagne" ci-apres). */ Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA1,nom_imageV)))) Bblock /* A1 = image du premier-plan (appelee "nuages" ci-apres). */ INITIALISATION_ACCROISSEMENT_2D(translation,ZERO,ZERO); /* Definition de la translation generale... */ SET_FILTRAGE(ACTIF); BoIn(niveau,NOIR,BLANC,PAS_COULEURS) Bblock MODIFICATION_LISTE_DE_SUBSTITUTION(niveau ,GENP(NIVA(COND(IFLT(niveau,seuil_de_masquage) ,NOIR ,MUL2(DIVI(FLOT(SOUS(BLANC,NOIR)) ,FLOT(SOUS(BLANC,seuil_de_masquage)) ) ,FLOT(SOUS(niveau,seuil_de_masquage)) ) ) ) ) ); Eblock EBoI SUBSTITUTION(L_SUBSTITUTION_VARIABLE); CALS(Imove(Image_ROUGE,ImageA1)); /* RO = "nuages" tels que les niveaux inferieurs au 'seuil_de_masquage' */ /* soient 'NOIR', et qu'ensuite, les autres niveaux (appartenant */ /* au segment [seuil_de_masquage,BLANC]) soient etendus dans [NOIR,BLANC]. */ SET_FILTRAGE(INACTIF); CALS(Imove(Masque,ImageA2)); /* M = "montagne". */ CALS(Itransparence_01(ImageR,Image_ROUGE,ImageA2)); /* R = transparence de la "montagne" vue a travers les "nuages". */ MASQUE_IMAGES(NOIR_PLANCHER); CALS(Itranslation(ImageA,ImageR,ADRESSE(translation),FAUX,FAUX)); /* A = transparence de la "montagne" vue a travers les "nuages" en */ /* eliminant le "ciel" (c'est-a-dire ce qui est au-dessus de la */ /* "montagne" en 'NOIR') par masquage ce qui donnera la portion */ /* des "nuages" figurant devant la "montagne". */ DEMASQUE_IMAGES; SET_FILTRAGE(ACTIF); SUBSTITUTION(L_SUBSTITUTION_01); CALS(Imove(ImageR,ImageA1)); /* R = "nuages" dans [NOIR,GRIS] (globalement). */ SUBSTITUTION(L_SUBSTITUTION_14); MASQUE_IMAGES(NOIR_PLANCHER); CALS(Itranslation(ImageR,ImageA2,ADRESSE(translation),FAUX,FAUX)); /* R = mise en place de la "montagne" dans [3*BLANC/4,4*BLANC/4] sans toucher aux */ /* "nuages" deja inseres. */ SET_FILTRAGE(INACTIF); CALS(Itranslation(Image_VERTE,ImageA1,ADRESSE(translation),FAUX,FAUX)); /* VE = recuperation de la partie des "nuages" presents devant la */ /* la "montagne". */ DEMASQUE_IMAGES; CALS(Imove(Masque,Image_VERTE)); /* M = recuperation de la partie des "nuages" presents devant la */ /* la "montagne". */ SET_FILTRAGE(ACTIF); SUBSTITUTION(L_SUBSTITUTION_13); MASQUE_IMAGES(seuil_de_masquage); CALS(Itranslation(ImageR,ImageA,ADRESSE(translation),FAUX,FAUX)); /* R = mise en place des "nuages" dans [2*BLANC/4,3*BLANC/4] devant */ /* la "montagne" par transparence. */ DEMASQUE_IMAGES; SET_FILTRAGE(INACTIF); CALi(Iupdate_image(nom_imageR,ImageR)); Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes Eblock ATes Bblock Test__CODE_ERREUR__ERREUR07; Eblock ETes RETU_Commande; Eblock ECommande