removed stdbool and now writes compressed file

This commit is contained in:
Phuntsok Drak-pa 2018-11-25 00:29:35 +01:00
parent 0ab3192fa4
commit b1a9997893
No known key found for this signature in database
GPG Key ID: 9CB34B6827C66D22
7 changed files with 33 additions and 19 deletions

1
.gitignore vendored
View File

@ -5,3 +5,4 @@ debug
*.out *.out
\.idea/ \.idea/
cmake-build-debug/ cmake-build-debug/
*.su

Binary file not shown.

View File

@ -13,9 +13,11 @@
* \param[in] t_zone Zone à laquelle le pixel est éligible ou non * \param[in] t_zone Zone à laquelle le pixel est éligible ou non
* \return Valeur booléenne, `1` si le pixel est éligible, `0` sinon * \return Valeur booléenne, `1` si le pixel est éligible, `0` sinon
*/ */
bool sameColor(Pixel *t_pixel, Zone *t_zone) { uint8_t sameColor(Pixel *t_pixel, Zone *t_zone) {
return t_pixel->r == t_zone->r && t_pixel->g == t_zone->g && return (t_pixel->r == t_zone->r && t_pixel->g == t_zone->g &&
t_pixel->b == t_zone->b; t_pixel->b == t_zone->b)
? 1
: 0;
} }
/** /**
@ -119,33 +121,45 @@ darray *imgToZones(Image *t_img) {
const size_t nb_pixels = darraySize(t_img->pixels); const size_t nb_pixels = darraySize(t_img->pixels);
int64_t i; int64_t i;
zones = darrayNew(sizeof(Zone)); zones = darrayNew(sizeof(Zone));
/* for each pixel, try to create a new zone */
for (i = 0; i < (int64_t)nb_pixels; ++i) { for (i = 0; i < (int64_t)nb_pixels; ++i) {
chooseZoneForPixel(t_img, i, zones); chooseZoneForPixel(t_img, i, zones);
} }
return zones; return zones;
} }
void write_compressed_file(Image *t_img, FILE *t_output, darray *t_zones) {
size_t i, j;
Zone *current_zone;
Segment *segment;
fwrite(&t_img->x, sizeof(t_img->x), 2, t_output);
for (i = 0; i < darraySize(t_zones); ++i) {
current_zone = darrayGet(t_zones, i);
fwrite(&current_zone->r, sizeof(current_zone->r) * 3, 1, t_output);
for (j = 0; j < darraySize(current_zone->segments); ++j) {
segment = darrayGet(current_zone->segments, j);
fwrite(&segment->right_limit, sizeof(Segment), 1, t_output);
}
darrayDelete(current_zone->segments);
}
}
/** /**
* Convertit une image en zones puis écrit ces zones dans un fichier, * Convertit une image en zones puis écrit ces zones dans un fichier,
* compressant ainsi l'image passée en argument. * compressant ainsi l'image passée en argument.
* *
* \param[in] t_input_file Nom/chemin du fichier ppm d'entrée * \param[in] t_input_file Nom/chemin du fichier `.ppm` d'entrée
* \param[in] t_output_file Nom/chemin du fichier `.su` de sortie
*/ */
void compress(const char *t_input_file) { void compress(const char *t_input_file, const char *t_output_file) {
Image *img; Image *img;
darray *zones; darray *zones;
Zone *current_zone; FILE *output_file;
size_t i;
img = newImage(); img = newImage();
imageLoadPPM(t_input_file, img); imageLoadPPM(t_input_file, img);
output_file = get_file(t_output_file, "wb");
zones = imgToZones(img); zones = imgToZones(img);
write_compressed_file(img, output_file, zones);
deleteImage(img); deleteImage(img);
for (i = 0; i < darraySize(zones); ++i) {
current_zone = darrayGet(zones, i);
darrayDelete(current_zone->segments);
}
darrayDelete(zones); darrayDelete(zones);
fclose(output_file);
} }

View File

@ -9,7 +9,7 @@
#include "ppm.h" #include "ppm.h"
/// Teste léligibilité dun pixel à une zone /// Teste léligibilité dun pixel à une zone
bool sameColor(Pixel *t_pixel, Zone *t_zone); uint8_t 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, int64_t t_idx, Zone *t_zone); void addPixelToSelectedZone(Image *t_img, int64_t t_idx, Zone *t_zone);
/// Sélectionne la zone correspondant à la couleur d'un pixel /// Sélectionne la zone correspondant à la couleur d'un pixel
@ -17,6 +17,6 @@ void chooseZoneForPixel(Image *t_img, int64_t t_idx, darray *zones);
/// Créé les zones d'une image /// Créé les zones d'une image
darray *imgToZones(Image *t_img); darray *imgToZones(Image *t_img);
/// Compresse l'image d'entrée /// Compresse l'image d'entrée
void compress(const char *t_input_file); void compress(const char *t_input_file, const char *t_output_file);
#endif /* SRC_COMPRESS_H_ */ #endif /* SRC_COMPRESS_H_ */

View File

@ -132,7 +132,7 @@ int main(int argc, char **argv) {
printf("input: %s\noutput: %s\n", argresults.input, argresults.output); printf("input: %s\noutput: %s\n", argresults.input, argresults.output);
} }
if(argresults.compress) { if(argresults.compress) {
compress(argresults.input); compress(argresults.input, argresults.output);
} else { } else {
puts("Uncompressing..."); puts("Uncompressing...");
} }

View File

@ -24,7 +24,7 @@ Pixel *newPixel(uint8_t t_r, uint8_t t_g, uint8_t t_b) {
res->r = t_r; res->r = t_r;
res->g = t_g; res->g = t_g;
res->b = t_b; res->b = t_b;
res->visited = false; res->visited = 0;
return res; return res;
} }

View File

@ -11,7 +11,6 @@
#define SRC_UTILITIES_H_ #define SRC_UTILITIES_H_
#include "darray.h" #include "darray.h"
#include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>