better filename

This commit is contained in:
Phuntsok Drak-pa 2018-11-24 16:35:33 +01:00
parent d34e106a4f
commit c4e6f1a422
No known key found for this signature in database
GPG Key ID: 9CB34B6827C66D22
2 changed files with 40 additions and 14 deletions

View File

@ -3,7 +3,7 @@
* \brief Implémentation de la ()compression dimages * \brief Implémentation de la ()compression dimages
*/ */
#include "common.h" #include "compress.h"
/** /**
* Cette fonction permet dévaluer si le pixel passé en argument est éligible à * Cette fonction permet dévaluer si le pixel passé en argument est éligible à
@ -34,14 +34,14 @@ bool sameColor(Pixel* t_pixel, Zone* t_zone) {
void addPixelToSelectedZone(Image* t_img, int t_idx, Zone* t_zone) { void addPixelToSelectedZone(Image* t_img, int t_idx, Zone* t_zone) {
Pixel *current_pixel = darrayGet(t_img->pixels, t_idx); Pixel *current_pixel = darrayGet(t_img->pixels, t_idx);
int xd, xg, y = t_idx / (int)t_img->x; int xd, xg, y = t_idx / (int)t_img->x;
if (current_pixel->visited || t_idx >= (int)darraySize(t_img->pixels) || if (t_idx >= (int)darraySize(t_img->pixels) ||
t_idx < 0 || !sameColor(current_pixel, t_zone)) { t_idx < 0 || !sameColor(current_pixel, t_zone)) {
return; return;
} }
(*current_pixel).visited = true; (*current_pixel).visited = true;
for(xd = t_idx; xd % (int)t_img->x != 0; ++xd) { /* fetch right limit of segment */ for(xd = t_idx; xd % (int)t_img->x != 0; ++xd) { /* fetch right limit of segment */
current_pixel = darrayGet(t_img->pixels, xd); current_pixel = darrayGet(t_img->pixels, xd);
if(current_pixel->visited || !sameColor(current_pixel, t_zone)) { if(!sameColor(current_pixel, t_zone)) {
break; break;
} }
(*current_pixel).visited = true; (*current_pixel).visited = true;
@ -60,8 +60,15 @@ void addPixelToSelectedZone(Image* t_img, int t_idx, Zone* t_zone) {
} }
} }
/* Selects the zone related to the pixel, skip tests if pixel has already been /**
* visited */ * Sélectionne la zone correspondant à la couleur du pixel. Si aucune zone
* existante ne correspond, une nouvelle est créée et est ajoutée à l'image.
* Chaque pixel est itéré, et ignoré si le pixel a déjà é visité auparavant.
*
* \param[out] t_img Limage contenant les pixels à tester
* \param[in] t_idx Index du pixel à tester
* \param[out] t_zones Liste des zones de limage
*/
void chooseZoneForPixel(Image* t_img, int t_idx, darray *zones) { void chooseZoneForPixel(Image* t_img, int t_idx, darray *zones) {
Zone* current_zone; Zone* current_zone;
Pixel* pixel; Pixel* pixel;
@ -90,7 +97,12 @@ void chooseZoneForPixel(Image* t_img, int t_idx, darray *zones) {
addPixelToSelectedZone(t_img, t_idx, current_zone); addPixelToSelectedZone(t_img, t_idx, current_zone);
} }
/* converts an image to zones */ /**
* Génère les zones de limage en titérant chaque pixel de limage.
*
* \param t_img Image à convertir en zones
* \return Pointeur vers un \ref darray de structures \ref Zone
*/
darray* imgToZones(Image* t_img) { darray* imgToZones(Image* t_img) {
darray *zones; darray *zones;
const size_t nb_pixels = darraySize(t_img->pixels); const size_t nb_pixels = darraySize(t_img->pixels);
@ -104,17 +116,24 @@ darray* imgToZones(Image* t_img) {
return zones; return zones;
} }
void compress(const char *input_file) { /**
* Convertit une image en zones puis écrit ces zones dans un fichier,
* compressant ainsi l'image passée en argument.
*
* \param[in] t_input_file Nom/chemin du fichier ppm d'entrée
*/
void compress(const char *t_input_file) {
Image *img; Image *img;
darray *zones; darray *zones;
size_t i;
img = newImage(); img = newImage();
imageLoadPPM(input_file, img); imageLoadPPM(t_input_file, img);
zones = imgToZones(img); zones = imgToZones(img);
/* print segments for debug ************************************************/ /* print segments for debug ************************************************/
DEBUG { DEBUG {
printf("Detected %zu zones\n", darraySize(zones)); printf("Detected %zu zones\n", darraySize(zones));
for (size_t i = 0; i < darraySize(zones); ++i) { for (i = 0; i < darraySize(zones); ++i) {
Zone *zone = darrayGet(zones, i); Zone *zone = darrayGet(zones, i);
printf("\n=== Zone %zu (%d %d %d) ===\n", i, zone->r, zone->g, zone->b); printf("\n=== Zone %zu (%d %d %d) ===\n", i, zone->r, zone->g, zone->b);
for (size_t j = 0; j < darraySize(zone->segments); ++j) { for (size_t j = 0; j < darraySize(zone->segments); ++j) {
@ -126,4 +145,8 @@ void compress(const char *input_file) {
} }
deleteImage(img); deleteImage(img);
for(i = 0; i < darraySize(zones); ++i) {
deleteZoneContent(darrayGet(zones, i));
}
darrayDelete(zones);
} }

View File

@ -3,17 +3,20 @@
* \brief Déclaration pour la ()compression dimages * \brief Déclaration pour la ()compression dimages
*/ */
#ifndef COMMON_H #ifndef COMPRESS_H
#define COMMON_H #define COMPRESS_H
#include "ppm.h" #include "ppm.h"
/// Teste léligibilité dun pixel à une zone /// Teste léligibilité dun pixel à une zone
bool sameColor(Pixel *, Zone *); bool sameColor(Pixel *t_pixel, Zone *t_zone);
/// Ajoute un pixel et ses pixels connexes à une zone /// Ajoute un pixel et ses pixels connexes à une zone
void addPixelToSelectedZone(Image *t_img, int t_idx, Zone *t_zone); void addPixelToSelectedZone(Image *t_img, int t_idx, Zone *t_zone);
/// Sélectionne la zone correspondant à la couleur d'un pixel
void chooseZoneForPixel(Image *t_img, int t_idx, darray *zones); void chooseZoneForPixel(Image *t_img, int t_idx, darray *zones);
/// Créé les zones d'une image
darray *imgToZones(Image *t_img); darray *imgToZones(Image *t_img);
void compress(const char *); /// Compresse l'image d'entrée
void compress(const char *t_input_file);
#endif /* COMMON_H */ #endif /* COMPRESS_H */