/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E G R O U P E M E N T   D ' U N   E N S E M B L E   D ' I M A G E S   ( S A N S   L E S   R E D U I R E )                */
/*        E N   U N E   I M A G E   D E   T A I L L E   S U P E R I E U R E  :                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/regroupe.01$K' :                                                                                           */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1994??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/sequence.01.I"

#define   NOMBRE_D_IMAGES_SUR_L_HORIZONTALE                                                                                             \
                    QUATRE
#define   NOMBRE_D_IMAGES_SUR_L_VERTICALE                                                                                               \
                    QUATRE
                                        /* Dimensions du tableau-image Resultat exprime en nombre d'images dans les deux directions. */

#define   ACCEPTER_LES_IMAGES_INEXISTANTES_SANS_ERREUR                                                                                  \
                    FAUX                                                                                                                \
                                        /* Indicateur introduit le 20211210104108 afin d'accepter sans message d'erreur les images   */ \
                                        /* inexistantest et de les remplacer silencieusement par du NOIR, la valeur par defaut       */ \
                                        /* assurant la compatibilite anterieure...                                                   */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        R E G R O U P E M E N T   D ' U N   E N S E M B L E   D ' I M A G E S   ( S A N S   L E S   R E D U I R E )                */
/*        E N   U N E   I M A G E   D E   T A I L L E   S U P E R I E U R 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_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(derniere_image,DERNIERE_IMAGE));
                                        /* Numero de la derniere 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(Int,INIT(numero_d_image,UNDEF));
                                        /* Numero de l'image courante.                                                               */
     DEFV(CHAR,INIT(POINTERc(nom_image),NOM_UNDEF));
                                        /* Nom courant des images.                                                                   */

     DEFV(Int,INIT(nombre_d_images_sur_l_horizontale,NOMBRE_D_IMAGES_SUR_L_HORIZONTALE));
     DEFV(Int,INIT(nombre_d_images_sur_la_verticale,NOMBRE_D_IMAGES_SUR_L_VERTICALE));
                                        /* Dimensions du tableau-image Resultat exprime en nombre d'images dans les deux directions. */

     DEFV(Logical,INIT(accepter_les_images_inexistantes_sans_erreur,ACCEPTER_LES_IMAGES_INEXISTANTES_SANS_ERREUR));
                                        /* Indicateur introduit le 20211210104108 afin d'accepter sans message d'erreur les images   */
                                        /* inexistantest et de les remplacer silencieusement par du NOIR, la valeur par defaut       */
                                        /* assurant la compatibilite anterieure...                                                   */

     DEFV(Float,INIT(translation_horizontale,FLOT__UNDEF));
     DEFV(Float,INIT(translation_verticale,FLOT__UNDEF));
                                        /* Increment des translations afin de generer le tableau final...                            */
     /*..............................................................................................................................*/
     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("derniere=",derniere_image);
                         GET_ARGUMENT_I("pas=",pas_des_images);
                         GET_ARGUMENT_I("chiffres=",nombre_de_chiffres);
                         GET_ARGUMENT_P("niveau=",REECHANTILLONNAGE_GENERAL_____niveau_manquant);

                         GET_ARGUMENT_I("horizontale=""h=",nombre_d_images_sur_l_horizontale);
                         GET_ARGUMENT_I("verticale=""v=",nombre_d_images_sur_la_verticale);

                         GET_ARGUMENT_L("accepter_images_inexistantes=""aii=",accepter_les_images_inexistantes_sans_erreur);
                                        /* Parametre introduit le 20211210104108...                                                  */
                         )
                    );

     EGAL(REECHANTILLONNAGE_GENERAL_____marquer_les_niveaux_manquants,FAUX);
                                        /* Ainsi, on pourra juxtaposer les differentes petites images dans le tableau final...       */

     PUSH_DIMENSIONS_2D;
     SET_DIMENSIONS_2D_SANS_VALIDATION(Xmin,XYZmax(Xmin,MUL2(nombre_d_images_sur_l_horizontale,EnTete_de_sauvegardM ## dimX))
                                      ,Ymin,XYZmax(Ymin,MUL2(nombre_d_images_sur_la_verticale,EnTete_de_sauvegardM ## dimY))
                                       );
                                        /* Sauvegarde et changement du dimensionnement...                                            */
     EGAL(translation_horizontale,DIVI(_____lNORMALISE_OX(dimX),FLOT(nombre_d_images_sur_l_horizontale)));
     EGAL(translation_verticale,DIVI(_____lNORMALISE_OY(dimY),FLOT(nombre_d_images_sur_la_verticale)));
                                        /* Increment des translations afin de generer le tableau final...                            */

     begin_nouveau_block
          Bblock
          BDEFV(image,image_de_regroupement);
                                        /* Definition de l'image Resultat maintenant que l'on a change les dimensions...             */
          CALi(Iinitialisation(image_de_regroupement,REECHANTILLONNAGE_GENERAL_____niveau_manquant));
                                        /* Initialisation de l'image Resultat.                                                       */

          EGAL(numero_d_image,premiere_image);
                                        /* Initialisation du numero de l'image courante.                                             */

                                        /* ATTENTION, par oubli de mise a jour, les deux variables :                                 */
                                        /*                                                                                           */
                                        /*                  Iredimensionnement_____Rtranslation_OX                                   */
                                        /*                  Iredimensionnement_____Rtranslation_OY                                   */
                                        /*                                                                                           */
                                        /* ont continue longtemps a s'appeler ici :                                                  */
                                        /*                                                                                           */
                                        /*                  Iredimensionnement_translation_OX                                        */
                                        /*                  Iredimensionnement_translation_OX                                        */
                                        /*                                                                                           */
                                        /* Si un probleme apparaissait (apres le 1995102700), il faudrait etudier precisemment       */
                                        /* le probleme et voir s'il ne faut pas changer le 'R' en 'A' (voir a ce propos le fichier   */
                                        /* 'v $xiii/di_image$FON' ou elles sont definies).                                           */

          EGAL(Iredimensionnement_____Rtranslation_OY,FZERO);
                                        /* Initialisation de la translation verticale.                                               */
          Repe(nombre_d_images_sur_la_verticale)
               Bblock
               EGAL(Iredimensionnement_____Rtranslation_OX,FZERO);
                                        /* Initialisation ou re-initialisation de la translation horizontale.                        */
               Repe(nombre_d_images_sur_l_horizontale)
                    Bblock
                    DEFV(Int,INIT(EnTete_de_sauvegardM ## EnTete_de_sauvegardM ## Xmin,EnTete_de_sauvegardM ## Xmin));
                    DEFV(Int,INIT(EnTete_de_sauvegardM ## EnTete_de_sauvegardM ## Xmax,EnTete_de_sauvegardM ## Xmax));
                    DEFV(Int,INIT(EnTete_de_sauvegardM ## EnTete_de_sauvegardM ## Ymin,EnTete_de_sauvegardM ## Ymin));
                    DEFV(Int,INIT(EnTete_de_sauvegardM ## EnTete_de_sauvegardM ## Ymax,EnTete_de_sauvegardM ## Ymax));
                                        /* Memorisation du dimensionnement des images Argument.                                      */

                    PUSH_DIMENSIONS_2D;
                    SET_DIMENSIONS_2D_SANS_VALIDATION(EnTete_de_sauvegardM ## EnTete_de_sauvegardM ## Xmin
                                                     ,EnTete_de_sauvegardM ## EnTete_de_sauvegardM ## Xmax
                                                     ,EnTete_de_sauvegardM ## EnTete_de_sauvegardM ## Ymin
                                                     ,EnTete_de_sauvegardM ## EnTete_de_sauvegardM ## Ymax
                                                      );
                                        /* Retour au dimensionnement des images Argument.                                            */

                    CALi(Inoir(ImageA));
                                        /* Au cas ou l'image courante n'existerait pas...                                            */

                    EGAL(nom_image
                        ,COND(IFEQ_chaine(nom_postfixe,NOM_UNDEF_VIDE)
                             ,chain_Aconcaten2_sauf_nom_pipe(nom_imageA
                                                            ,chain_numero(numero_d_image,nombre_de_chiffres)
                                                             )
                             ,chain_Aconcaten3_sauf_nom_pipe(nom_imageA
                                                            ,chain_numero(numero_d_image,nombre_de_chiffres)
                                                            ,nom_postfixe
                                                             )
                              )
                         );

                    BSaveModifyVariable(Logical
                                       ,bloquer_tous_les_messages_d_erreur_des_fichiers
                                       ,COND(IL_FAUT(accepter_les_images_inexistantes_sans_erreur)
                                            ,BLOQUER_TOUS_LES_MESSAGES_D_ERREUR_DES_FICHIERS
                                            ,bloquer_tous_les_messages_d_erreur_des_fichiers
                                             )
                                        );
                                        /* Introduit le 20211210110503...                                                            */

                    Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA,nom_image))))
                                        /* On notera que le chargement des images Argument a lieu avec les dimensions definies       */
                                        /* par '$formatI"...                                                                         */
                         Bblock
                         Eblock
                    ATes
                         Bblock
                         Test(IL_FAUT(accepter_les_images_inexistantes_sans_erreur))
                                        /* Test introduit le 20211210104108...                                                       */
                              Bblock
                              Eblock
                         ATes
                              Bblock
                              Test__CODE_ERREUR__ERREUR07;
                              Eblock
                         ETes
                         Eblock
                    ETes

                    ESaveModifyVariable(Logical
                                       ,bloquer_tous_les_messages_d_erreur_des_fichiers
                                        );
                                        /* Introduit le 20211210110503...                                                            */

                    PULL_DIMENSIONS_2D;

                    CALS(Iredimensionnement(image_de_regroupement
                                           ,Xmin,Xmax,Ymin,Ymax
                                           ,ImageA
                                           ,EnTete_de_sauvegardM ## EnTete_de_sauvegardM ## Xmin
                                           ,EnTete_de_sauvegardM ## EnTete_de_sauvegardM ## Xmax
                                           ,EnTete_de_sauvegardM ## EnTete_de_sauvegardM ## Ymin
                                           ,EnTete_de_sauvegardM ## EnTete_de_sauvegardM ## Ymax
                                           ,REECHANTILLONNAGE_SANS_REECHANTILLONNAGE_AVEC_POSITIONNEMENT_QUELCONQUE
                                            )
                         );
                                        /* Et insertion de l'image courante dans le tableau final...                                 */

                    INCR(Iredimensionnement_____Rtranslation_OX,translation_horizontale);
                                        /* Progression de la translation horizontale.                                                */

                    INCR(numero_d_image,pas_des_images);
                                        /* Determination du numero de l'image courante...                                            */
                    Eblock
               ERep

               INCR(Iredimensionnement_____Rtranslation_OY,translation_verticale);
                                        /* Progression de la translation verticale.                                                  */
               Eblock
          ERep

          CALi(Iupdate_image(nom_imageR,image_de_regroupement));

          EDEFV(image,image_de_regroupement);
                                        /* Definition de l'image Resultat maintenant que l'on a change les dimensions...             */
          Eblock
     end_nouveau_block

     PULL_DIMENSIONS_2D;

     RETU_Commande;
     Eblock
ECommande



Copyright © Jean-François COLONNA, 2019-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2019-2024.