Voir la version complète : [GBA][Aide] Conversion RGB en couleur GBA
Bonjour à tous!
Je me suis réveillé ce matin avec une question qui a troublé mon existance...:w00t:
Bon OK, j'exagere un peu!
Je voulais savoir si vous connaissiez (Brunni n'est pas visé =_= ) comment convertir une couleur RGB (R, G , B ) en couleur de Palette pour GBA ( 0xABCD )
Voili Voilou :p
Merci!
#define RGB(r,g,b) ((r)+(g<<5)+(b<<10))
avec r, g et b qu'on doit diviser par 8 au préalable lorsque c'est exprimé sur 8 bits.
EDIT, petite correction au passage.^^
Merci Japi! Au fait tu te présentes à la neo compo?
^^ ,
Avec VisualHam , y'a RGB Translater qui est fourni ( Dans external Tools > RGB Color Translater ) ... ca converti un RGB en Hexa et inversement :) .
Sinon pour convertir depuis ton jeu , ca serait plus un macro de ce style :
#define RGB(r,g,b) ((((b)>>3)<<10)+(((g)>>3)<<5)+((r)>>3))
Voila ;) .
je suis plus sûr sur lke chiffre par lequel il faut diviser ta valeur 8 bits.
C'est codé comme ça dans la gba : xbbbbbgggggrrrrr
donc on a 5 bits par couleur.
Je voulais savoir si vous connaissiez (Brunni n'est pas visé =_= ) comment convertir une couleur RGB (R, G , B ) en couleur de Palette pour GBA ( 0xABCD )
C'est quoi le problème avec moi? déjà hier un truc du même style que j'ai pas pigé :p
Bon sinon les valeurs 8 bits (PC), il faut les diviser par 8 car c'est du 5 bits sur GBA, donc >> 3 comme l'a montré Kyros. Mais si tu codes ton jeu pour GBA, autant utiliser du 5 bits (0 ... 31), ça t'évitera des calculs supplémentaires inutiles ^^
merci les gars!
En fait j'avais RGB (18.8.4) et 0x1112 et je ne voyais pas le rapport mais en fait grace a vous j'ai trouvé!!!!
R = 10010 en binaire
G = 01000 en binaire avec decalage de 5 bits
B = 00100 en binaire avec decalage de 10 bits ce qui nous fait :
0h0 00100 01000 10010 soit 0h 0001 0001 0001 0010 soit 0x1112
Merci!!!!:rolleyes:
Je vais pouvoir modifier mes petites palettes!
C'est quoi le problème avec moi? déjà hier un truc du même style que j'ai pas pigé :pC'est juste que pour moi tu es la référence en matiere de conversion Graphique pour GBA! :ange:
ah oui, voilà, c'est ça, la couleur sur 5 bits, donc voilà d'où vient le 31 que je mets au debut et donc qui est faux.
Il faut donc pour passer de 256 à 32, diviser par 8 la couleur comme le dit Brunni.
Ca fait trop longtemps que j'ai pas codé on dirait...
Dr.Vince
30/07/2006, 14h08
moi j'ai une question également, qui a décrété qu'il fallait divisé par 8 ?? y a une explication niveau graphisme par rapport à ça, ou alors c'est juste technique ??
c'est juste technique.
Quand tu lis une couleur dans un soft d'image genre photoshop c'est souvent exprimé par trois composantes R G et B qui vont de 0 à 255 soit 8 bits par composantes, ce qui donne une image en 24bits couleurs.
Là, le registre GBA qui stocke la couleur d'un pixel est codé sur 15bits de la façon suivante:
5 bits par composante : xbbbbbgggggrrrrr, le x etant un bit vide.
La gba n'affiche donc pas des images en 16bits couleur mais 15bits couleur et avec une repartition égale des canaux à raison de 5 bits chacun.
Donc 5bits c'est une plage de 32 valeur (2^5=32) qui va de 0 à 31.
Si tu as une composante sur 256 et que tu veux la mettre sur 32 , tu fait comment? tu la divise par 8. (255/32 = 8).
Maintenant que tu as fait un genre de reduction d'echelle pour passer tes couleurs de 8bits à 5bits, tu vas pouvoir les stocker dans ton registre couleur GBA au moyen d'un decalage de bit.
Alekmaul
30/07/2006, 14h57
Un truc aussi par rapport aux couleurs GBA, je vous conseille de tester votre soft sous no$gba, il possède une option de filtre permettant de "faire comme si" vous utilisez une GBASP, une GBA classique, etc (dans le menu options/ GBA Mode, au milieu de l'écran)...
Un truc aussi par rapport aux couleurs GBA, je vous conseille de tester votre soft sous no$gba, il possède une option de filtre permettant de "faire comme si" vous utilisez une GBASP, une GBA classique, etc (dans le menu options/ GBA Mode, au milieu de l'écran)...Sympa! Je vais tester!
Dr.Vince
30/07/2006, 15h19
c'est juste technique.
Quand tu lis une couleur dans un soft d'image genre photoshop c'est souvent exprimé par trois composantes R G et B qui vont de 0 à 255 soit 8 bits par composantes, ce qui donne une image en 24bits couleurs.
Là, le registre GBA qui stocke la couleur d'un pixel est codé sur 15bits de la façon suivante:
5 bits par composante : xbbbbbgggggrrrrr, le x etant un bit vide.
La gba n'affiche donc pas des images en 16bits couleur mais 15bits couleur et avec une repartition égale des canaux à raison de 5 bits chacun.
Donc 5bits c'est une plage de 32 valeur (2^5=32) qui va de 0 à 31.
Si tu as une composante sur 256 et que tu veux la mettre sur 32 , tu fait comment? tu la divise par 8. (255/32 = 8).
Maintenant que tu as fait un genre de reduction d'echelle pour passer tes couleurs de 8bits à 5bits, tu vas pouvoir les stocker dans ton registre couleur GBA au moyen d'un decalage de bit.
tout ça je le savais, ma question allait plus dans le sens : si c'est technique, le fait de diviser par 8 a un impact au niveau des couleurs, alors pourquoi diviser par 8 et pas faire une autre opération.
en clair, qu'est-ce qui fait que la division par 8, conserve tout de même "en gros" les couleurs ??
omg> ha ok, merci ^^
Dr. Vince> Parce que c'est comme ça sur GBA: 0 représente le noir, 31 le blanc. Sur PC c'est 0 le noir, 255 le blanc. Donc si tu mets 255 sur GBA tu auras un débordement (>31) et tes couleurs seront "caillées", si tu mets 31 sur PC ce sera très sombre. Donc voilà, 0...31 sur GBA correspond à 0...255 sur PC, donc on divise par 8. Si tu divises par 16 ça donnera 0...15 => trop sombre, si tu divises par 4 ça donnera 0...63 => débordement...
Les 3 derniers bits d'une composante couleur codée sur 8 bits ne servent qu'à affiner le résultat je pense. Les faire sauter au moyen d'un décalage de bits ne fait que baisser la finesse de la couleur, en l'assombrissant un chouia néamoins (une troncature ne vaudra pas un arrondi en terme de finesse ;) ).
*meithal qui crois avoir compris le truc :lol: *
Si vous n'avez toujours pas pigé le truc allez faire un tour sur notre site (pocket traduction) dans la section tutoriel YoboY explique comment la couleur est codé sous yy-chr...
Tiens faudrait que je pense à recruter des grammeux pour le romhacking...ouais, on sait jamais ^^
Hein, quoi ? j'ai fais ça moi ? :p
Bref si vous voulez pas vous prendre trop la tête sur tous ces chiffres, il suffit de vous dire qu'une couleur en informatique est un mélange de trois couleurs de base (RVB bien sur) et que pour avoir une couleur donnée on la décompose avec trois valeurs d'intensité des couleurs de base.
Cette valeur pour être plus facile à comprendre est comme un poucentage.
Exemple pour avoir du magenta on mélange 100% de rouge avec 100% de bleu et 0% de vert.
Bien entendu en informatique on compte pas en base 10 donc le 100 c'est pire que abstrait. On utilise un certain nombre de bits pour définir ce pourcentage.
Une couleur définie sur 24bits indique que les intensités des couleurs de base sont définies sur 8bits (donc prennent une valeur de 0 à 255).
une couleur GBA a ses intensités définies sur 5bits (donc les valeurs vont de 0 à 31).
reprenons notre magenta :
en pourcentage : (100%, 0%, 100%)
en 24bits (255, 0 255)
en GBA (31, 0, 31)3 façon différente de le représenter mais c'est toujours la même couleur.
Pour les convertions dans les couleurs ramenons tout ce beau monde entre 0 et 1.
un pourcentage (a, b, c) ramené entre 0 et 1 donne (a/100, b/100, c/100)
couleur 24bits (x, y, z) donne (x/255, y/255, z/255)
couleur GBA (X, Y, Z) donne ( X/31, Y/31, Z/31)
on aura pour une même couleur toujours la relation a/100 = x/255 = X/31, ...
donc pour passer du 24bits au GBA on a X= x *31/255 ce qui est a peu pres égal à X=x/8 (calcul qui est plus simple à faire)
voila si avec tout ça vous avez toujours pas tout compris sur les couleurs ben je sais plus quoi vous dire :D
vBulletin® v.3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org