removed stdbool and now writes compressed file
This commit is contained in:
parent
0ab3192fa4
commit
b1a9997893
1
.gitignore
vendored
1
.gitignore
vendored
@ -5,3 +5,4 @@ debug
|
|||||||
*.out
|
*.out
|
||||||
\.idea/
|
\.idea/
|
||||||
cmake-build-debug/
|
cmake-build-debug/
|
||||||
|
*.su
|
||||||
|
BIN
img/asterix.ppm
BIN
img/asterix.ppm
Binary file not shown.
@ -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(¤t_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);
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#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 *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_ */
|
||||||
|
@ -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...");
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user