/*************************************************************************************************************************************/
/* */
/* M I S E C O T E A C O T E D E D E U X I M A G E S E T */
/* P A R E X E M P L E D ' U N E P A I R E S T E R E O S C O P I Q U E : */
/* */
/* */
/* Definition : */
/* */
/* Cette commande genere une image */
/* presentant deux autres images mises */
/* cote a cote, et formant par exemple */
/* un couple stereoscopique. */
/* */
/* */
/* La disposition utilisee est la suivante */
/* par rapport a une matrice 2x2 carree */
/* d'images : */
/* */
/* */
/* Y ^ */
/* | */
/* Ymax |++++++++++ */
/* |---------- */
/* | Ga | Dr | */
/* |---------- */
/* Ymin |++++++++++ */
/* |-------------> */
/* Xmin Xmax X */
/* */
/* */
/* ATTENTION : */
/* Pour les images dont les dimensions ne */
/* sont pas divisibles par 2, cette operation */
/* introduit une bande noire a droite (si 'dimX' */
/* n'est pas divisible par 2) et/ou en haut (si */
/* 'dimY' n'est pas divisible par 2). */
/* */
/* */
/* Author of '$xci/cote_a_cote$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1993??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 : */
/* */
/*************************************************************************************************************************************/
@define PRAGMA_CPP_____POUR_LES_Iload_NE_PAS_VERIFIER_LES_MULTIPLES_UTILISATIONS_DE_L_IMAGE_____ImageA1
/* Introduit le 20060124092106. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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 EDITER_LES_MESSAGES_D_ERREUR \
EDITER_LES_MESSAGES_D_ERREUR_DES_FICHIERS \
/* Indique si les messages d'erreur des fichiers doivent etre emis ('VRAI') ou pas ('FAUX'). */
#define METTRE_UN_FOND \
FAUX \
/* Faut-il mettre un fond au cas ou l'on ne charge pas toutes les images... */
#define MOYENNAGE \
VRAI \
/* Indique si l'on moyenne ('VRAI'), ou bien si l'on prend le 'MAXI' ('FAUX'). */
#define CALCULER_LE_MAXIMUM \
CALCUL_DU_MAXIMUM_DANS_UNE_DEMI_FENETRE \
/* Dans le cas ou il ne faut pas calculer la moyenne, indique s'il faut calculer le */ \
/* maximum ('VRAI') ou pas ('FAUX'), c'est-a-dire prendre le point courant... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#define GENERE(FENETRE,imageR,nom_image) \
Bblock \
Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA1,nom_image)))) \
/* A = image courante. */ \
Bblock \
FENETRE(imageR \
,ImageA1 \
,MULTIPLICITE_2x2_POUR_LES_DEMI_FENETRES \
,MULTIPLICITE_2x2_POUR_LES_DEMI_FENETRES \
,moyennage \
,calculer_le_maximum \
); \
/* R = image courante reduite la ou il faut ; on notera que la reduction de moitie est */ \
/* faite par extraction du 'MAXI' (voir 'moyennage') et ce afin d'eviter des artefacts */ \
/* dans les images "multi-palettes"... */ \
Eblock \
ATes \
Bblock \
Test(IL_NE_FAUT_PAS(mettre_un_fond)) \
Bblock \
Test(IL_FAUT(files_____editer_les_messages_d_erreur_de_lecture_des_fichiers)) \
Bblock \
Test__CODE_ERREUR__ERREUR07; \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
ATes \
Bblock \
Eblock \
ETes \
Eblock \
ETes \
Eblock \
/* Procedure d'insertion de l'image courante dans une fenetre. */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M I S E C O T E A C O T E D E D E U X I M A G E S E T */
/* P A R E X E M P L E D ' U N E P A I R E S T E R E O S C O P I Q U E : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageF),NOM_PIPE));
/* Nom du fond a utiliser au cas ou l'on ne charge pas toutes les images... */
DEFV(Logical,INIT(mettre_un_fond,METTRE_UN_FOND));
/* Indique s'il faut mettre ('VRAI') ou pas ('FAUX') un fond derriere... */
DEFV(CHAR,INIC(POINTERc(nom_imageAG),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageAD),NOM_PIPE));
/* Nom des deux images arguments. */
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
/* Nom de l'image a generer. */
DEFV(Logical,INIT(moyennage,MOYENNAGE));
/* Indique si l'on moyenne ('VRAI'), ou bien si l'on prend le 'MAXI' ('FAUX'). */
DEFV(Logical,INIT(calculer_le_maximum,CALCULER_LE_MAXIMUM));
/* Dans le cas ou il ne faut pas calculer la moyenne, indique s'il faut calculer le */
/* maximum ('VRAI') ou pas ('FAUX'), c'est-a-dire prendre le point courant... */
DEFV(deltaF_2D,translation);
/* Translation de centrage vertical du couple d'image... */
/*..............................................................................................................................*/
EGAL(files_____editer_les_messages_d_erreur_de_lecture_des_fichiers,EDITER_LES_MESSAGES_D_ERREUR);
/* Initialisation de l'indicateur d'edition des messages d'erreur... */
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(GET_ARGUMENT_C("imageF=""F=",nom_imageF);
GET_ARGUMENT_L("fond=",mettre_un_fond);
GET_ARGUMENT_C("imageAG=""AG=",nom_imageAG);
GET_ARGUMENT_C("imageAD=""AD=",nom_imageAD);
GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_L("moyenne=",moyennage);
GET_ARGUMENT_L("maximum=",calculer_le_maximum);
)
);
CALi(Inoir(ImageR));
/* Initialisation de l'image Resultat. */
Test(IL_FAUT(mettre_un_fond))
Bblock
Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageR,nom_imageF))))
/* Un fond a ete demande, on le charge... */
Bblock
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
EGAL(mettre_un_fond,FAUX);
/* En cas d'erreur, on supprime le fond, ce qui correspond a un fond 'NOIR'. */
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
GENERE(DEMI_FENETRE_BG_MULTIPLE,ImageA2,nom_imageAG);
GENERE(DEMI_FENETRE_BD_MULTIPLE,ImageA2,nom_imageAD);
/* Reduction primaire, */
INITIALISATION_ACCROISSEMENT_2D(translation,FZERO,_____lNORMALISE_OY(FRA4(dimY)));
/* Definition d'une translation de centrage, */
CALS(Itranslation(ImageR,ImageA2,ADRESSE(translation),FAUX,FAUX));
/* Et enfin centrage du couple d'image... */
CALi(Iupdate_image(nom_imageR,ImageR));
/* Et rangement... */
RETU_Commande;
Eblock
ECommande