/*************************************************************************************************************************************/
/* */
/* F O N C T I O N S D E B A S E A U N A L B U M : */
/* */
/* */
/* Definition : */
/* */
/* Ce fichier contient toutes les definitions */
/* de base de gestion et de manipulation d'une */
/* album raster, quelle que soit la definition. */
/* */
/* */
/* Author of '$xiii/mono_album$DEF' : */
/* */
/* Jean-Francois Colonna (LACTAMME, 20001224092445). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* I N I T I A L I S A T I O N D ' U N A L B U M Q U E L C O N Q U E : */
/* */
/*************************************************************************************************************************************/
#define GdAinitialisation(album_d_images,valeur,initialisation) \
Bblock \
begin_fuite \
Bblock \
CALi(initialisation(PAGE(album_d_images,Z),valeur)); \
/* Initialisation de l'album. */ \
Eblock \
end_fuite \
Eblock \
/* Initialisation quelconque d'un album d'images. */
#define dAinitialisation(album_d_images,valeur) \
Bblock \
GdAinitialisation(album_d_images,valeur,Iinitialisation); \
Eblock \
/* Initialisation quelconque d'un album d'images "standard". */
#define dAFinitialisation(album_d_images,valeur) \
Bblock \
GdAinitialisation(album_d_images,valeur,IFinitialisation); \
Eblock \
/* Initialisation quelconque d'un album d'images "flottant". */
#define dAnoir(album_d_images) \
Bblock \
begin_fuite \
Bblock \
CALi(Inoir(PAGE(album_d_images,Z))); \
/* Initialisation de l'album. */ \
Eblock \
end_fuite \
Eblock \
/* Nettoyage d'un album d'images. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* C O N V E R S I O N D ' U N E I M A G E N O N S T A N D A R D E N U N A L B U M S T A N D A R D : */
/* */
/*************************************************************************************************************************************/
#define dAconversion_image_album_____exterieur_des_bandes \
FLOT__NOIR
#define dAconversion_image_album_____interieur_des_bandes(niveau_de_marquage) \
FLOT(niveau_de_marquage)
#define dAconversion_image_album(album_d_imagesR,imageA,niveau_de_marquage,facteur_d_elargissement_des_bandes) \
Bblock \
DEFV(genere_Float,INIT(niveau_minimum,IFnivo_minimum(imageA))); \
DEFV(genere_Float,INIT(niveau_maximum,IFnivo_maximum(imageA))); \
\
DEFV(genere_Float,INIT(seuil_inferieur,FLOT__NIVEAU_UNDEF)); \
DEFV(genere_Float,INIT(seuil_superieur,FLOT__NIVEAU_UNDEF)); \
\
DEFV(Float,INIT(elargissement_des_bandes,FLOT__UNDEF)); \
\
DEFV(Float,INIT(largeur_des_bandes,FLOT__UNDEF)); \
\
BSaveModifyVariable(Logical \
,IFpasse_bande_____forcer_les_valeurs_intermediaires \
,VRAI \
); \
BSaveModifyVariable(genere_Float \
,IFpasse_bande_____valeur_intermediaire \
,dAconversion_image_album_____interieur_des_bandes(niveau_de_marquage) \
); \
\
EGAL(largeur_des_bandes,DIVI(SOUS(niveau_maximum,niveau_minimum),dimZ)); \
/* On divise par 'dimZ' et non pas 'SOUS(Zmax,Zmin)' afin d'avoir autant de couches */ \
/* qu'il y a de 'Z's differents... */ \
EGAL(elargissement_des_bandes,MUL2(facteur_d_elargissement_des_bandes,largeur_des_bandes)); \
/* On divise par 'dimZ' et non pas 'SOUS(Zmax,Zmin)' afin d'avoir autant de couches */ \
\
EGAL(seuil_inferieur,niveau_minimum); \
\
begin_fuite \
Bblock \
BDEFV(imageF,bande_courante); \
\
DEFV(genere_Float,INIT(seuil_inferieur_effectif,FLOT__NIVEAU_UNDEF)); \
DEFV(genere_Float,INIT(seuil_superieur_effectif,FLOT__NIVEAU_UNDEF)); \
/* Introduit le 20180503103123 afin de permettre l'elargissement des bandes et donc leur */ \
/* recouvrement... */ \
\
EGAL(seuil_superieur,ADD2(seuil_inferieur,largeur_des_bandes)); \
\
EGAL(seuil_inferieur_effectif,SOUS(seuil_inferieur,elargissement_des_bandes)); \
EGAL(seuil_superieur_effectif,ADD2(seuil_superieur,elargissement_des_bandes)); \
/* Le 20180503103123 les bandes peuvent donc etre elargies. On notera qu'il est inutile */ \
/* de verifier que les seuils effectifs sont dans [niveau_minimum,niveau_maximum]... */ \
\
CALi(IFpasse_bande(bande_courante \
,imageA \
,seuil_inferieur_effectif \
,seuil_superieur_effectif \
,dAconversion_image_album_____exterieur_des_bandes \
,dAconversion_image_album_____exterieur_des_bandes \
) \
); \
CALi(Ifloat_std_brutal(PAGE(album_d_imagesR,Z),bande_courante)); \
/* Extraction d'une "bande" de l'image Argument... */ \
\
EDEFV(imageF,bande_courante); \
\
EGAL(seuil_inferieur,seuil_superieur); \
Eblock \
end_fuite \
\
ESaveModifyVariable(genere_Float,IFpasse_bande_____valeur_intermediaire); \
ESaveModifyVariable(Logical,IFpasse_bande_____forcer_les_valeurs_intermediaires); \
Eblock \
/* Conversion d'une image non standard en un album standard (introduite le 20180502105010). */