Problème algorithmique

Hello,
j'ai un souci qui me prend la tête en ce moment et qui me fait tourner en rond, si quelqu'un a une idée géniale, je suis preneur.
Voici mon problème : pour le GUI Toolkit, je suis en train d'implémenter une forme de "Depth Buffer" afin de savoir sur quelle fenêtre on clique ou quelle fenêtre on survole.
Donc pour ce faire, chaque fenêtre (en fait chaque widget) se trouve accompagné d'une ID qui est en entier non signé compris entre 0 --> 999.
Ce ID est décomposé en trois chiffres (centaines / dizaines / unités) et chaque chiffre (compris entre 0 et 9) est "upscalé" pour avoir une composante (0 .. 255)
Ce qui fait que je me retrouve (enfin je suis sensé me retrouver avec un trio RGB (0..255, 0..255, 0..255).
Le problème est au retour : quand je clique qq part, je récupère la couleur du pixel correspondant dans le depth buffer, donc le fameux triplet RGB (0..255, 0..255, 0..255) et j'applique la moulinette inverse pour récupérer le Widget ID, mais par le jeux des arrondis, je me retrouve avec un décalage variable de 0 ou 1 qui fait que cela ne marche pas pour faire tourner le programme.
Je suis donc à la recherche d'un algo 100% bijectif (avec les arrondis pris en compte) qui permette de passer de mon WidgetID (0..999) -> RGB (0..255, 0..255, 0..255) et vice versa, retrouver mon Widget ID (exact) à partir d'une couleur RGB (0..255, 0..255, 0..255).
Eventuellement si ca peut aider, je peux limiter le Widget ID à 500 maxi, et possiblement même à 250.
Merci d'avance pour tout bonne idée.
Sly
j'ai un souci qui me prend la tête en ce moment et qui me fait tourner en rond, si quelqu'un a une idée géniale, je suis preneur.
Voici mon problème : pour le GUI Toolkit, je suis en train d'implémenter une forme de "Depth Buffer" afin de savoir sur quelle fenêtre on clique ou quelle fenêtre on survole.
Donc pour ce faire, chaque fenêtre (en fait chaque widget) se trouve accompagné d'une ID qui est en entier non signé compris entre 0 --> 999.
Ce ID est décomposé en trois chiffres (centaines / dizaines / unités) et chaque chiffre (compris entre 0 et 9) est "upscalé" pour avoir une composante (0 .. 255)
Ce qui fait que je me retrouve (enfin je suis sensé me retrouver avec un trio RGB (0..255, 0..255, 0..255).
Le problème est au retour : quand je clique qq part, je récupère la couleur du pixel correspondant dans le depth buffer, donc le fameux triplet RGB (0..255, 0..255, 0..255) et j'applique la moulinette inverse pour récupérer le Widget ID, mais par le jeux des arrondis, je me retrouve avec un décalage variable de 0 ou 1 qui fait que cela ne marche pas pour faire tourner le programme.
Je suis donc à la recherche d'un algo 100% bijectif (avec les arrondis pris en compte) qui permette de passer de mon WidgetID (0..999) -> RGB (0..255, 0..255, 0..255) et vice versa, retrouver mon Widget ID (exact) à partir d'une couleur RGB (0..255, 0..255, 0..255).
Eventuellement si ca peut aider, je peux limiter le Widget ID à 500 maxi, et possiblement même à 250.
Merci d'avance pour tout bonne idée.
Sly