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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user