2010-03-17 6 views
0

Je voudrais implémenter des «modes de dessin» (dans ma propre bibliothèque graphique).Implémenter les "modes de dessin" dans une bibliothèque graphique?

qui tire avec ET, OU, etc Cependant je stocke des couleurs en utilisant des flotteurs, chaque canal entre 0 et 1,0 Dois-je d'abord convertir chaque canal de couleur à 0-255 avant de pouvoir utiliser l'AND, OR , etc modes de dessin? puis convertir en flottant (0.0-1.0)?

Ou y a-t-il une autre façon de le faire?

merci

Répondre

2

Je crois que la question n'est pas assez claire. AND, OR, etc. sont des opérateurs booléens. De nombreuses langues prennent également en charge les versions bit à bit. Donc, vous devez d'abord définir ce qu'est exactement la signification de AND-ing ou OR-ing deux valeurs de couleur. Qu'est-ce que Red AND Green? Est-ce noir?

Si la réponse à la question ci-dessus est positive, alors vous souhaitez probablement appliquer ces opérateurs dans le sens du bit sur la représentation RVB (entière) de vos couleurs. Dans ce cas, vous devez: 1. Convertir les nombres flottants en entiers (8 bits ou autres) 2. Emballez les 3 canaux (ou 4 avec Alpha) en un seul mot (probablement un entier de 32 bits) 3 Appliquer l'opérateur bit à bit 4. Déballez les canaux et convertissez-les en flotteurs.

Notez que lors de la conversion de floats en int, vous devez d'abord multiplier votre valeur float par MAX_COLOR (255 dans votre exemple), puis lancer. Dans le cas contraire, vous vous retrouvez avec tous les canaux étant 0. Opposé lorsque vous convertissez de nouveau en flottants, lancez d'abord puis divisez par MAX_COLOR pour normaliser vos valeurs.