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
*/
#include "common.h"
#include "compress.h"
/**
* 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) {
Pixel *current_pixel = darrayGet(t_img->pixels, t_idx);
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)) {
return;
}
(*current_pixel).visited = true;
for(xd = t_idx; xd % (int)t_img->x != 0; ++xd) { /* fetch right limit of segment */
current_pixel = darrayGet(t_img->pixels, xd);
if(current_pixel->visited || !sameColor(current_pixel, t_zone)) {
if(!sameColor(current_pixel, t_zone)) {
break;
}
(*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) {
Zone* current_zone;
Pixel* pixel;
@ -90,7 +97,12 @@ void chooseZoneForPixel(Image* t_img, int t_idx, darray *zones) {
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 *zones;
const size_t nb_pixels = darraySize(t_img->pixels);
@ -104,17 +116,24 @@ darray* imgToZones(Image* t_img) {
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;
darray *zones;
size_t i;
img = newImage();
imageLoadPPM(input_file, img);
imageLoadPPM(t_input_file, img);
zones = imgToZones(img);
/* print segments for debug ************************************************/
DEBUG {
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);
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) {
@ -126,4 +145,8 @@ void compress(const char *input_file) {
}
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
*/
#ifndef COMMON_H
#define COMMON_H
#ifndef COMPRESS_H
#define COMPRESS_H
#include "ppm.h"
/// 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
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);
/// Créé les zones d'une image
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 */