/*************************************************************************************************************************************/ /* */ /* A C C E S A U N A L B U M N O N S T A N D A R D E T C O N V E R S I O N : */ /* */ /* */ /* Author of '$xci/acces_3D.11$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20020306084959). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 #include image_image_IMAGESF_EXT #include image_image_DI_ALBUM_EXT /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #include xci/sequence.01.I" /* ATTENTION, on definit ainsi le symbole 'DERNIERE_IMAGE' qui ne sert a rien ici, puisque */ /* c'est en effet 'Zmax' qui joue ce role... */ #define CONVERTIR_BRUTALEMENT \ FAUX \ /* Afin de pouvoir convertir les images flottantes sans tester la validite de leurs */ \ /* niveaux par rapport aux capacites des images 'Standard's. Cette possibilite fut */ \ /* introduite le 20080902111554... */ #define BINARISER \ FAUX \ /* En plus de 'IL_FAUT(convertir_brutalement)', faut-il binariser ? Ceci fut introduit */ \ /* le 20100901091722... */ #define F_SEUIL_NOIR_BLANC \ FZERO \ /* Seuil de discrimination flottant (introduit le 20100901093829)... */ #define F_NIVEAU_INFERIEUR \ FZERO #define F_NIVEAU_SUPERIEUR \ FU /* Niveaux flottants jouant le role du 'NOIR' et du 'BLANC' (introduits le 20100901093829). */ #define CALCULER_LES_EXTREMA \ VRAI \ /* Faut-il calculer les extrema pour la conversion ('VRAI') ou les forcer ('FAUX') ? */ #define TRONQUER_LES_NIVEAUX \ FAUX \ /* Faut-il tronquer dans [NOIR,BLANC] les niveaux ('VRAI') ou pas ('FAUX') ? */ #define CONSERVER_LE_ZERO \ FAUX \ /* Doit-on conserver le zero ('VRAI') ou pas ('FAUX') ? Ceci a ete introduit le */ \ /* 20050628171416 en notant que la valeur par defaut, pour des raisons de compatibilite */ \ /* anterieure a ete choisie inverse de celle de 'v $xci/acces.11$I CONSERVER_LE_ZERO'... */ #define MINIMUM_DE_L_ALBUM \ FLOT__NOIR #define MAXIMUM_DE_L_ALBUM \ FLOT__BLANC /* Valeur forcee des extrema lorsque 'IL_NE_FAUT_PAS(calculer_les_extrema)'. */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* A C C E S A U N A L B U M N O N S T A N D A R D E T C O N V E R S I O N : */ /* */ /*************************************************************************************************************************************/ 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_postfixe),NOM_UNDEF_VIDE)); /* Nom d'un eventuel postfixe a placer derriere <nom_imageA><numero> (par exemple '$ROUGE'). */ DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE)); /* Numero de la premiere image, */ DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES)); /* Pas de passage d'un numero d'image a une autre. */ DEFV(Int,INIT(nombre_de_chiffres,NOMBRE_DE_CHIFFRES)); /* Nombre de chiffres codant le numero des images de la serie... */ DEFV(Logical,INIT(convertir_brutalement,CONVERTIR_BRUTALEMENT)); /* Afin de pouvoir convertir les images flottantes sans tester la validite de leurs */ /* niveaux par rapport aux capacites des images 'Standard's. Cette possibilite fut */ /* introduite le 20080902111554... */ DEFV(Logical,INIT(binariser,BINARISER)); /* En plus de 'IL_FAUT(convertir_brutalement)', faut-il binariser ? Ceci fut introduit */ /* le 20100901091722... */ DEFV(genere_Float,INIT(Fseuil,F_SEUIL_NOIR_BLANC)); /* Seuil de discrimination flottant (introduit le 20100901093829)... */ DEFV(genere_Float,INIT(Fniveau_inferieur,F_NIVEAU_INFERIEUR)); DEFV(genere_Float,INIT(Fniveau_superieur,F_NIVEAU_SUPERIEUR)); /* Niveaux flottants jouant le role du 'NOIR' et du 'BLANC' (introduits le 20100901093829). */ DEFV(Logical,INIT(calculer_les_extrema,CALCULER_LES_EXTREMA)); /* Faut-il calculer les extrema pour la conversion ('VRAI') ou les forcer ('FAUX') ? */ DEFV(genere_Float,INIT(minimum_de_l_album,MINIMUM_DE_L_ALBUM)); DEFV(genere_Float,INIT(maximum_de_l_album,MAXIMUM_DE_L_ALBUM)); /* Valeur forcee des extrema lorsque 'IL_NE_FAUT_PAS(calculer_les_extrema)'. */ DEFV(Logical,INIT(tronquer_les_niveaux,TRONQUER_LES_NIVEAUX)); /* Faut-il tronquer dans [NOIR,BLANC] les niveaux ('VRAI') ou pas ('FAUX') ? */ DEFV(Logical,INIT(conserver_le_zero,CONSERVER_LE_ZERO)); /* Doit-on conserver le zero ('VRAI') ou pas ('FAUX') ? Ceci a ete introduit le */ /* 20050628171416 en notant que la valeur par defaut, pour des raisons de compatibilite */ /* anterieure a ete choisie inverse de celle de 'v $xci/acces.11$I CONSERVER_LE_ZERO'... */ /*..............................................................................................................................*/ GET_ARGUMENTSi(nombre_d_arguments ,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA); GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_C("postfixe=",nom_postfixe); GET_ARGUMENT_I("premiere=",premiere_image); GET_ARGUMENT_I("pas=",pas_des_images); GET_ARGUMENT_I("chiffres=",nombre_de_chiffres); GET_ARGUMENT_L("brutal=",convertir_brutalement); /* Parametre introduit le 20080902111554... */ GET_ARGUMENT_L("binariser=",binariser); GET_ARGUMENT_F("Fseuil=""Fs=",Fseuil); GET_ARGUMENT_F("Finferieur=""Finf=",Fniveau_inferieur); GET_ARGUMENT_F("Fsuperieur=""Fsup=",Fniveau_superieur); /* Parametres introduits le 20100901091722 et le 20100901093829... */ GET_ARGUMENT_L("extrema=",calculer_les_extrema); GET_ARGUMENT_F("minimum=""m=",minimum_de_l_album); GET_ARGUMENT_F("maximum=""M=",maximum_de_l_album); GET_ARGUMENT_L("tronquer=",tronquer_les_niveaux); GET_ARGUMENT_L("zero=",conserver_le_zero); ) ); Test(IFET(IL_FAUT(tronquer_les_niveaux),IL_FAUT(calculer_les_extrema))) Bblock PRINT_ATTENTION("lorsque la troncation des niveaux est demandee, les extrema calcules ne sont pas exploites"); Eblock ATes Bblock Eblock ETes begin_nouveau_block Bblock BDEFV(albumF,album_d_imagesA); BDEFV(album,album_d_imagesR); /* Definition des albums d'images Argument et Resultat... */ CALS(dAnoir(album_d_imagesR)); /* Initialisation de l'image Resultat. */ CALi(dAloadF_album(album_d_imagesA ,nom_imageA ,nom_postfixe ,premiere_image ,pas_des_images ,nombre_de_chiffres ,FAUX ,UNDEF ,FAUX ) ); /* Chargement de l'album Argument... */ /* */ /* L'argument 'Inv' (='FAUX') a ete introduit le 20091125133722... */ Test(PAS_D_ERREUR(CODE_ERREUR)) Bblock DEFV(genere_Float,INIT(minimum_effectif_de_l_album,FLOT__UNDEF)); DEFV(genere_Float,INIT(maximum_effectif_de_l_album,FLOT__UNDEF)); /* Extrema effectif de l'album Argument. */ Test(IL_NE_FAUT_PAS(convertir_brutalement)) /* Test introduit le 20080902111843... */ Bblock Test(IL_FAUT(calculer_les_extrema)) Bblock EGAL(minimum_de_l_album,F_INFINI); EGAL(maximum_de_l_album,F_MOINS_L_INFINI); /* Pour extraire les extrema de l'album Argument. */ begin_fuite Bblock DEFV(genere_Float,INIT(minimum_de_la_page_courante,IFnivo_minimum(PAGE(album_d_imagesA,Z)))); DEFV(genere_Float,INIT(maximum_de_la_page_courante,IFnivo_maximum(PAGE(album_d_imagesA,Z)))); /* Extrema de la page courante de l'album Argument. */ EGAL(minimum_de_l_album,MIN2(minimum_de_l_album,minimum_de_la_page_courante)); EGAL(maximum_de_l_album,MAX2(maximum_de_l_album,maximum_de_la_page_courante)); /* Extrema de l'album Argument. */ Eblock end_fuite Eblock ATes Bblock Eblock ETes Test(IL_FAUT(conserver_le_zero)) Bblock EGAL(maximum_effectif_de_l_album,NEUT(MAX2(ABSO(minimum_de_l_album),ABSO(maximum_de_l_album)))); EGAL(minimum_effectif_de_l_album,NEGA(maximum_effectif_de_l_album)); Eblock ATes Bblock EGAL(maximum_effectif_de_l_album,maximum_de_l_album); EGAL(minimum_effectif_de_l_album,minimum_de_l_album); Eblock ETes begin_fuite Bblock Test(IL_NE_FAUT_PAS(tronquer_les_niveaux)) Bblock CALS(Ifloat_std(PAGE(album_d_imagesR,Z) ,PAGE(album_d_imagesA,Z) ,minimum_effectif_de_l_album ,maximum_effectif_de_l_album ) ); /* Conversion en un album standard... */ Eblock ATes Bblock CALS(Ifloat_std_avec_troncation(PAGE(album_d_imagesR,Z) ,PAGE(album_d_imagesA,Z) ,FLOT__NOIR ,FLOT__BLANC ) ); /* Conversion en un album standard avec troncation... */ Eblock ETes Eblock end_fuite Eblock ATes Bblock begin_fuite Bblock Test(IL_FAUT(binariser)) Bblock BDEFV(imageF,pageT); /* Page courante binarisee... */ CALS(IFbinarisation_generale(pageT,PAGE(album_d_imagesA,Z),Fseuil,Fniveau_inferieur,Fniveau_superieur)); CALS(IFmove(PAGE(album_d_imagesA,Z),pageT)); /* Binarisation introduite le 20100901091722... */ EDEFV(imageF,pageT); /* Page courante binarisee... */ Eblock ATes Bblock Eblock ETes CALS(Ifloat_std_brutal(PAGE(album_d_imagesR,Z) ,PAGE(album_d_imagesA,Z) ) ); /* Conversion en un album standard sans aucune verification (possibilite introduite le */ /* 20080902111843...). */ Eblock end_fuite Eblock ETes CALi(dAupdate_album(nom_imageR ,nom_postfixe ,premiere_image ,pas_des_images ,album_d_imagesR ,nombre_de_chiffres ,FAUX ) ); /* L'argument 'Inv' (='FAUX') a ete introduit le 20100624091641... */ Eblock ATes Bblock Eblock ETes EDEFV(album,album_d_imagesR); EDEFV(albumF,album_d_imagesA); /* Definition des albums d'images Argument et Resultat... */ Eblock end_nouveau_block RETU_Commande; Eblock ECommande