/*************************************************************************************************************************************/
/* */
/* P E R M U T A T I O N D E R E G R O U P E M E N T */
/* D E S B I T S D E M E M E P O I D S D ' U N E I M A G E : */
/* */
/* */
/* Definition : */
/* */
/* Cette commande genere une image */
/* dont le nom est le premier argument */
/* d'appel ; elle est le resultat de */
/* la permutation des bits de l'image Argument. */
/* de facon a ce que les bits de meme poids soient */
/* ensemble. */
/* */
/* */
/* Author of '$xci/PermuteBits.01$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20130702100525). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define FAIRE_LA_PERMUTATION_DIRECTE \
VRAI \
/* Faut-il faire la permutation directe ('VRAI') ou inverse ('FAUX') ? */
#define NOMBRE_D_ITERATIONS \
UN \
/* Nombre de generations, la valeur par defaut garantissant la compatibilite anterieure. */ \
/* Ce parametre a ete introduit le 20130704080243... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#define CHOIX_IMAGE(image1,image2) \
COND(IL_NE_FAUT_PAS(permuter_les_deux_images),image1,image2) \
/* Introduit le 20130704080243 pour eviter un 'Imove(...)' penalisant... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P E R M U T A T I O N D E R E G R O U P E M E N T */
/* D E S B I T S D E M E M E P O I D S D ' U N E I M A G E : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
DEFV(Logical,INIT(faire_la_permutation_directe,FAIRE_LA_PERMUTATION_DIRECTE));
/* Faut-il faire la permutation directe ('VRAI') ou inverse ('FAUX') ? */
DEFV(Int,INIT(nombre_d_iterations,NOMBRE_D_ITERATIONS));
/* Nombre de generations, la valeur par defaut garantissant la compatibilite anterieure. */
/* Ce parametre a ete introduit le 20130704080243... */
/*..............................................................................................................................*/
GET_ARGUMENTSi(nombre_d_arguments
,BLOC(GET_ARGUMENT_C("imageA=""A=",nom_imageA);
GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_L("directe=",faire_la_permutation_directe);
GET_ARGUMENT_N("inverse=",faire_la_permutation_directe);
GET_ARGUMENTS2_I("taille_paquets_bits=""paquets=""paquet=""taille="
,Ipermutation_directe_de_regroupement_des_bits_de_meme_poids_____taille_des_paquets_de_bits
,Ipermutation_inverse_de_regroupement_des_bits_de_meme_poids_____taille_des_paquets_de_bits
);
/* Arguments introduits le 20130703091737 et completes le 20130703171150 ("paquet="). */
GET_ARGUMENTS2_I("translation_index_bits=""translation=""tr="
,Ipermutation_directe_de_regroupement_des_bits_de_meme_poids_____translation_des_index_de_bits
,Ipermutation_inverse_de_regroupement_des_bits_de_meme_poids_____translation_des_index_de_bits
);
/* Arguments introduits le 20130707103732... */
GET_ARGUMENT_I("iterations=""iter=",nombre_d_iterations);
/* Argument introduit le 20130704080243... */
)
);
CALi(Inoir(ImageR));
/* Initialisation de l'image Resultat. */
/* */
/* Je note le 20130702163030 que cela est redondant avec ce qui est fait dans les deux */
/* fonctions 'Ipermutation_directe_de_regroupement_des_bits_de_meme_poids(...)' et */
/* 'Ipermutation_inverse_de_regroupement_des_bits_de_meme_poids(...)', mais c'est plus */
/* propre ainsi et de plus on ne sait pas de quoi demain sera fait... */
Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageA,nom_imageA))))
Bblock
/* Chargement de la premiere image Argument. */
DEFV(Logical,INIT(permuter_les_deux_images,FAUX));
/* Afin d'eviter un 'Imove(...)' assez penalisant en terme de performance... */
Repe(nombre_d_iterations)
/* La possibilite d'iterer a ete introduite le 20130704080243... */
Bblock
Test(IL_FAUT(faire_la_permutation_directe))
Bblock
CALS(Ipermutation_directe_de_regroupement_des_bits_de_meme_poids(CHOIX_IMAGE(ImageR,ImageA)
,CHOIX_IMAGE(ImageA,ImageR)
)
);
/* Permutation directe des bits... */
/* */
/* On notera le 20130702132329 qu'en appliquant cette commande a 'v $xiirC/OBJC.41_42.11' */
/* vingt-trois fois de suite on retombe exactement sur l'image de depart. Cela devrait */
/* etre une propriete generale puisque je le verifie pour 'v $xiirC/OBJC.N1___.11' le */
/* 20130702134833. Au passage, en cours de route j'observe des petites copies de mon */
/* portrait anamorphosees et surtout tournees de pi/2 ! */
/* */
/* En fait le 20130702135936, je note que le nombre d'itterations a effectuer pour retomber */
/* sur l'image de depart depend du '$formatI' : */
/* */
/* Suh 5 */
/* Suq 17 */
/* Sud 19 */
/* Std 7 */
/* Sdu 23 */
/* */
/* Squ 25 (non premier, dommage...) */
/* */
/* ce qui est un peu chaotique, en notant qu'il y a beaucoup de nombres premiers... */
/* */
/* On notera qu'evidemment ces periodes sont les memes que l'on soit en mode "directe" ou */
/* "inverse"... */
Eblock
ATes
Bblock
CALS(Ipermutation_inverse_de_regroupement_des_bits_de_meme_poids(CHOIX_IMAGE(ImageR,ImageA)
,CHOIX_IMAGE(ImageA,ImageR)
)
);
/* Permutation inverse des bits... */
Eblock
ETes
EGAL(permuter_les_deux_images,NOTL(permuter_les_deux_images));
Eblock
ERep
EGAL(permuter_les_deux_images,NOTL(permuter_les_deux_images));
CALi(Iupdate_image(nom_imageR,CHOIX_IMAGE(ImageR,ImageA)));
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
RETU_Commande;
Eblock
ECommande