/*************************************************************************************************************************************/
/* */
/* C O M P R E S S I O N / D E C O M P R E S S I O N " R U N - L E N G T H E N C O D I N G 02 " */
/* E N L O N G U E U R V A R I A B L E : */
/* */
/* */
/* Author of '$xrC/CompressionDeCompressionRunLengthEncoding.02$vv$I' : */
/* */
/* Jean-Francois Colonna (LACTAMME, 20130926151747). */
/* */
/*************************************************************************************************************************************/
#include "CompressionDeCompressionRunLengthEncodingGeneral.01.vv.I"
#define ENREGISTREMENT_D_UNE_SUITE_DE_REPETITIONS \
{ \
int iterer=VRAI; \
int CompteurRepetitionsCourant=CompteurRepetitions; \
int TableauCompteurRepetitions[NOMBRE_D_OCTETS_PAR_MOT]; \
int IndiceTableau=0; \
int IndiceMaximalTableau; \
\
while (iterer == VRAI) \
{ \
int quotient=CompteurRepetitionsCourant/COULEURS; \
int reste=CompteurRepetitionsCourant%COULEURS; \
\
TableauCompteurRepetitions[IndiceTableau]=reste; \
IndiceTableau++; \
\
if ((quotient == 0) || (IndiceTableau == NOMBRE_D_OCTETS_PAR_MOT)) \
{ \
iterer=FAUX; \
} \
else \
{ \
CompteurRepetitionsCourant=quotient; \
} \
} \
\
ImageCompactee[JImageCompactee]=IndiceTableau; \
JImageCompactee++; \
\
IndiceMaximalTableau=IndiceTableau-1; \
\
for (IndiceTableau=IndiceMaximalTableau ; IndiceTableau >=0 ; IndiceTableau--) \
{ \
ImageCompactee[JImageCompactee]=TableauCompteurRepetitions[IndiceTableau]; \
JImageCompactee++; \
} \
\
ImageCompactee[JImageCompactee]=CaracterePrecedent; \
JImageCompactee++; \
}
#define COMPRESSION_RUN_LENGTH_ENCODING_02_DU_FICHIER_R \
{ \
COMPRESSION_RUN_LENGTH_ENCODING_DU_FICHIER_R(3,(VRAI == VRAI)); \
}
#define DECOMPRESSION_RUN_LENGTH_ENCODING_02_DU_FICHIER_R \
{ \
TypeImage *ImageCompactee=malloc(longueur); \
TypeImage DEFINITION_IMAGE(ImageDecompactee,dimY,dimX); \
\
long int DimensionImageEffective=0; \
long int JImageADeCompacter; \
\
LECTURE_FICHIER(ImageCompactee,longueur); \
\
x=Xmin; \
y=Ymin; \
\
JImageADeCompacter=0; \
\
while (JImageADeCompacter < NombreOctetsLus) \
{ \
int CompteurRepetitions=0; \
int IndiceTableau=0; \
int IndiceMaximalTableau; \
long int compteur; \
\
IndiceMaximalTableau=ImageCompactee[JImageADeCompacter]-1; \
/* Recuperation du nombre d'octets utiles pour le compteur de repetitions... */ \
JImageADeCompacter++; \
\
for (IndiceTableau=IndiceMaximalTableau ; IndiceTableau >=0 ; IndiceTableau--) \
{ \
CompteurRepetitions = (CompteurRepetitions*COULEURS)+ImageCompactee[JImageADeCompacter]; \
/* Reconstitution du compteur de repetitions par concatenation de plusieurs octets. */ \
JImageADeCompacter++; \
} \
\
for (compteur=1 ; compteur <= CompteurRepetitions ; compteur++) \
{ \
GENERATION_D_UNE_SUITE_DE_REPETITIONS(ImageCompactee[JImageADeCompacter]); \
} \
\
JImageADeCompacter++; \
} \
\
if (DimensionImageEffective > DimImages) \
{ \
fprintf(stderr,"Trop de points generes lors du decompactage RLE2.\n"); \
} \
else \
{ \
} \
\
ECRITURE_FICHIER(ImageDecompactee,DimensionImageEffective); \
\
free(ImageCompactee); \
}