hopefully fixed some stuff, and see TODO

This commit is contained in:
Phuntsok Drak-pa 2018-11-22 14:05:11 +01:00
parent e27dc2dce3
commit 9c843e6af3
No known key found for this signature in database
GPG Key ID: 9CB34B6827C66D22
3 changed files with 30 additions and 9 deletions

View File

@ -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

View File

@ -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");
} }

View File

@ -63,10 +63,7 @@ Image *newImage() {
* \param[in] self Conteneur dimage à détruire * \param[in] self Conteneur dimage à 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);
} }