hopefully fixed some stuff, and see TODO
This commit is contained in:
parent
e27dc2dce3
commit
9c843e6af3
@ -1,4 +1,5 @@
|
||||
* Development
|
||||
** TODO Remove y axis on segments
|
||||
** TODO Test if the zones detection works
|
||||
** TODO Add compressed file output
|
||||
** TODO Add file uncompression
|
||||
|
33
src/common.c
33
src/common.c
@ -61,22 +61,34 @@ 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 */
|
||||
/* Selects the zone related to the pixel, skip tests if pixel has already been
|
||||
* visited */
|
||||
void chooseZoneForPixel(Image* t_img, int t_idx, darray *zones) {
|
||||
Zone* current_zone;
|
||||
Pixel* pixel;
|
||||
size_t i;
|
||||
|
||||
pixel = darrayGet(t_img->pixels, t_idx);
|
||||
if (pixel->visited)
|
||||
/* if the pixel has already been visited, no need to continue */
|
||||
if (pixel->visited) {
|
||||
return;
|
||||
}
|
||||
/* for each known zone, see if it matches the current pixel's color */
|
||||
for (i = 0; i < darraySize(zones); ++i) {
|
||||
current_zone = darrayGet(zones, i);
|
||||
/* if it does, add selected pixel and its neighbourging pixels of the same
|
||||
* color */
|
||||
if (sameColor(pixel, current_zone)) {
|
||||
addPixelToSelectedZone(t_img, t_idx, current_zone);
|
||||
break;
|
||||
return;
|
||||
}
|
||||
}
|
||||
/* if none of the same color was found, create a new one, add it to the image
|
||||
* and add the selected pixel and its neighbours of the same color to the zone
|
||||
*/
|
||||
current_zone = newZone(pixel->r, pixel->g, pixel->b);
|
||||
darrayPushBack(zones, current_zone);
|
||||
addPixelToSelectedZone(t_img, t_idx, current_zone);
|
||||
}
|
||||
|
||||
/* converts an image to zones */
|
||||
@ -86,6 +98,7 @@ darray* imgToZones(Image* t_img) {
|
||||
size_t i;
|
||||
zones = darrayNew(sizeof(Zone));
|
||||
|
||||
/* for each pixel, try to create a new zone */
|
||||
for (i = 0; i < nb_pixels; ++i) {
|
||||
chooseZoneForPixel(t_img, i, zones);
|
||||
}
|
||||
@ -98,9 +111,19 @@ void compress(const char *input_file) {
|
||||
img = newImage();
|
||||
imageLoadPPM(input_file, img);
|
||||
zones = imgToZones(img);
|
||||
darrayDelete(zones);
|
||||
|
||||
printf("Detected %zu zones\n", darraySize(zones));
|
||||
for(size_t 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) {
|
||||
Segment* segm = darrayGet(zone->segments, j);
|
||||
printf("[%d: %d, %d]\t", segm->y, segm->xg, segm->xd);
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
|
||||
deleteImage(img);
|
||||
printf("test\n");
|
||||
}
|
||||
|
@ -63,10 +63,7 @@ Image *newImage() {
|
||||
* \param[in] self Conteneur d’image à détruire
|
||||
*/
|
||||
void deleteImage(Image *t_self) {
|
||||
unsigned long i;
|
||||
for (i = 0; i < darraySize(t_self->pixels); ++i) {
|
||||
deletePixel(darrayGet(t_self->pixels, i));
|
||||
}
|
||||
printf("deleted all pixels\n");
|
||||
darrayDelete(t_self->pixels);
|
||||
free(t_self);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user