better filename
This commit is contained in:
parent
d34e106a4f
commit
c4e6f1a422
@ -3,7 +3,7 @@
|
|||||||
* \brief Implémentation de la (dé)compression d’images
|
* \brief Implémentation de la (dé)compression d’images
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#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à été visité auparavant.
|
||||||
|
*
|
||||||
|
* \param[out] t_img L’image contenant les pixels à tester
|
||||||
|
* \param[in] t_idx Index du pixel à tester
|
||||||
|
* \param[out] t_zones Liste des zones de l’image
|
||||||
|
*/
|
||||||
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 l’image en titérant chaque pixel de l’image.
|
||||||
|
*
|
||||||
|
* \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);
|
||||||
}
|
}
|
@ -3,17 +3,20 @@
|
|||||||
* \brief Déclaration pour la (dé)compression d’images
|
* \brief Déclaration pour la (dé)compression d’images
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef COMMON_H
|
#ifndef COMPRESS_H
|
||||||
#define COMMON_H
|
#define COMPRESS_H
|
||||||
|
|
||||||
#include "ppm.h"
|
#include "ppm.h"
|
||||||
|
|
||||||
/// Teste l’éligibilité d’un pixel à une zone
|
/// Teste l’éligibilité d’un 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 */
|
Loading…
Reference in New Issue
Block a user