/* Convertit une couleur du modèle (une couleur dans le cube de couleur RVB, dans le modèle de couleur courant) en un index de couleur pour le mode X. les couleurs primaires pures sont des cas particuliers, le reste est traité par un modèle 2-2-2. */ int ModelColorToColorIndex(ModelColor * Color) { if (Color->Red == 0) { if (Color->Green == 0) { /* Bleu pur */ return(192+(Color->Blue >> 2)); } else if (Color->Blue == 0) { /* Vert pur */ return(128+(Color->Green >> 2)); } } else if ((Color->Green == 0) && (Color->Blue == 0)) { /* Rouge pur */ return(64+(Color->Red >> 2)); } /* Mélange multicolore; pré-calcule l'index avec les deux bits les plus significatifs de chaque composante de couleur */ return(((Color->Red & 0xC0) >> 2) | ((Color->Green & 0xC0) >> 4) | ((Color->Blue & 0xC0) >> 6)); }