Il est plus facile de gérer les couleurs sur base de leur nombre total de bits pour évaluer la taille de chaque canal que d'essayer de faire le contraire.
Par contre, nous pourrions effectivement envisager une approche mixte, sous une forme proche de
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class ColorMono
{
/* aliases de types sur canal_type, value_type et color_type */
/* valeurs énumérées "On" (1) et "Off" (0) */
};
template<typename Canal>
class TColorGray
{
/* aliases de types sur canal_type, value_type et color_type */
};
template<typename Value, typename Canal>
class TColorRGB
{
/* aliases de types sur canal_type, value_type et color_type */
/* détermination du nombre de bit utilisés par chaque canal */
};
template<typename Value, typename Canal>
class TColorRGBA
{
/* aliases de types sur canal_type, value_type et color_type */
/* détermination du nombre de bit utilisés par chaque canal */
};
/* tous les autres types de couleur... qui peuvent attendre avant
* d'être implémentés
*/ |
et donc d'avoir quelques typedef (colorRGB_24, colorRGBA_32, ...) pour la facilité, mais cela nécessite, de pouvoir déterminer non seulement le type capable de représenter la valeur elle-même de la couleur, mais aussi... le type capable de représenter la valeur du canal.
Ceci dit, le raisonnement pour obtenir la valeur d'un des canal resterait à chaque fois identique, et s'il est vrai que, pour l'instant, nous travaillons essentiellement avec des canaux 8 bits, cela nous assurerait l'évolutivité de la chose quand... les technologies pousseront à passer à autre chose ;)