next up previous contents index
suivant: Annexe monter: Inversion de table de précédent: Recherche orientée   Table des matières   Index

Inversion de la table

La méthode finale d'inversion de couleur est simplement une concaténation des méthodes précédemment définies :
void colormap::inverse(unsigned char* input,
                       unsigned char* output)
{
  int start=give_entry(input[0]);
  iterator to_beg(*this,start-1,backward);
  iterator to_end(*this,start+1,forward);
  int min_dist(0),current_dist;
  int index(start);
  
  for(int i=0;i<3;i++)
    min_dist+=(input[i]-tab[3*start+i])*(input[i]-tab[3*start+i]);

  oriented_search(to_beg,input,min_dist,index);
  oriented_search(to_end,input,min_dist,index);
  
  for(int i=0;i<3;i++)
    output[i]=tab[3*index+i];
}
On récupère tout d'abord l'indice (dans la table) de la couleur dont la distance suivant la première composante est la plus proche de la couleur d'entrée. On initialise ensuite deux itérateurs nous permettant de parcourir la table dans le sens des indices croissants et décroissants à partir de l'indice précédemment calculé. On initialise également, la distance minimale et l'index associé à la valeur retournée par la fonction give_entry. Il suffit ensuite de lancer deux oriented_search permettant d'effectuer la recherche dans les deux directions. Le résultat est ensuite recopié dans la variable de sortie.

Brun Luc 2004-03-25