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