2009-06-29 12 views
0

Possible en double:
How to represent 18bit color depth to 16bit color depth?Comment représenter une profondeur de couleur de 16 bits à une profondeur de couleur de 18 bits?

Je suis le portage d'un logiciel qui construisent à partir du périphérique de profondeur de couleur 16 bits à un appareil de profondeur de couleur 18 bits? Comment puis-je représenter la profondeur de couleur de 18 bits? Merci.

+1

je modifier l'original plutôt que de faire un presque double: http://stackoverflow.com/questions/1056879/how-18-bit- device-display-bitmap – GManNickG

+1

modifiez le message original au lieu d'en poster un nouveau. – Naveen

+0

S'il vous plaît ne pas créer de questions en double http://stackoverflow.com/questions/1056879/how-to-represent-18bit-color-depth-to-16bit-color-depth –

Répondre

0

NOTE: Ceci est juste une modification de ma réponse à votre question précédente, puisque les deux sont si similaires - il vous suffit d'inverser le processus.


Vous sera tout d'abord avoir pour accéder à chacune des composantes de couleur (à savoir extraire la valeur R, la valeur V et de la valeur B). La façon de procéder dépend totalement de la façon dont la couleur est stockée dans la mémoire. Si elle est stockée en tant que RVB, avec 5-6-5 bits pour les composants, vous pouvez utiliser quelque chose comme ceci:

blueComponent = (colour & 0x3F); 
greenComponent = (colour >> 6) & 0x3F; 
redComponent = (colour >> 12) & 0x3F; 

Cela va extraire les composants de couleur pour vous, vous pouvez utiliser la méthode décrite ci-dessus pour convertir chacun des composants (je suppose que 18 bits utilisera 6 bits par composant):

blueComponent = (blueComponent/64.0) * 32; 
//greenComponent = (greenComponent/64.0) * 64; //not needed 
redComponent = (redComponent /64.0) * 32; 

Notez que le code ci-dessus, il est important que vous utilisez 64,0, ou une autre méthode qui assurera que votre programme représente le nombre comme un nombre à virgule flottante. Ensuite, pour combiner les composants dans votre couleur 18 bits, utilisez:

colour = (redComponent << 11) | (greenComponent << 5) | blueComponent; 
Questions connexes