diff --git a/src/common.c b/src/common.c index ca30c08..ad9cc4d 100644 --- a/src/common.c +++ b/src/common.c @@ -32,9 +32,8 @@ bool sameColor(Pixel* t_pixel, Zone* t_zone) { * \param[out] t_zone Zone à laquelle sera potentiellement ajouté le pixel */ void addPixelToSelectedZone(Image* t_img, int t_idx, Zone* t_zone) { - Pixel* current_pixel; + Pixel *current_pixel = darrayGet(t_img->pixels, t_idx); int xd, xg, y = t_idx / (int)t_img->x; - current_pixel = darrayGet(t_img->pixels, t_idx); if (current_pixel->visited || t_idx >= (int)darraySize(t_img->pixels) || t_idx < 0 || !sameColor(current_pixel, t_zone)) { return; @@ -42,20 +41,20 @@ void addPixelToSelectedZone(Image* t_img, int t_idx, Zone* t_zone) { (*current_pixel).visited = true; for(xd = t_idx; xd % (int)t_img->x != 0; ++xd) { /* fetch right limit of segment */ current_pixel = darrayGet(t_img->pixels, xd); - if(!sameColor(current_pixel, t_zone)) { + if(current_pixel->visited || !sameColor(current_pixel, t_zone)) { break; } (*current_pixel).visited = true; } for(xg = t_idx; xg - y >= 0; --xg) { /* fetch right limit of segment */ current_pixel = darrayGet(t_img->pixels, xd); - if(!sameColor(current_pixel, t_zone)) { + if(current_pixel->visited || !sameColor(current_pixel, t_zone)) { break; } (*current_pixel).visited = true; } /* Add segment to its zone */ - darrayPushBack(t_zone->segments, newSegment(y, xd, xg)); + darrayPushBack(t_zone->segments, newSegment(xd, xg)); for(; xg <= xd; ++xg) { /* process every pixel up and down the segment */ addPixelToSelectedZone(t_img, t_idx + t_img->x, t_zone); } diff --git a/src/utilities.c b/src/utilities.c index 7a81042..8e10871 100644 --- a/src/utilities.c +++ b/src/utilities.c @@ -80,10 +80,9 @@ void deleteImage(Image *t_self) { * \param[in] xg Abscisse extrême gauche du segment * \return Pointeur sur un conteneur de segment */ -Segment *newSegment(uint16_t t_y, uint16_t t_xd, uint16_t t_xg) { +Segment *newSegment(uint16_t t_xd, uint16_t t_xg) { Segment *res; res = (Segment *)malloc(sizeof(Segment)); - res->y = t_y; res->xd = t_xd; res->xg = t_xg; return res; diff --git a/src/utilities.h b/src/utilities.h index b66444d..680bad0 100644 --- a/src/utilities.h +++ b/src/utilities.h @@ -98,7 +98,6 @@ struct Zone { * à son extrême droite et à son extrême gauche. */ struct Segment { - uint16_t y; /*!< ligne du segment */ uint16_t xd; /*!< extrême droit du segment */ uint16_t xg; /*!< extrême gauche du segment */ }; @@ -116,7 +115,7 @@ Image *newImage(); /// \brief Destructeur d’une image void deleteImage(Image *t_self); /// \brief Constructeur d’un segment de couleur unie -Segment *newSegment(uint16_t t_y, uint16_t t_xd, uint16_t t_xg); +Segment *newSegment(uint16_t t_xd, uint16_t t_xg); /// \brief Destructeur d’un segment de couleur unie void deleteSegment(Segment *t_self); /// \brief Constructeur de conteneur de zone