thoduv
11/09/2006, 19h43
Salut à tous !
Bon voilà j'essaie de réaliser une fonction qui mélange deux couleurs avec un coeff donné.
Exemple, je lui donne noir et blanc, 50% et ca me sort du gris.
Et donc ... j'y arrive pas ! :cry:
Voilà mon code actuel qui marche à moitié (et encore), j'utilise une profondeur de 16 bits (gba/ds) :
/* blend_colors: mélange deux couleurs selont un coeff
bg = couleur d'arrière-plan
fg = couleur de premier-plan
bv = coeff (de 0 à 31) du mélange: 0 -> bg, 31 -> fg
*/
static inline u16 blend_colors(u16 bg, u16 fg, u8 bv)
{
u8 r, g, b;
u8 bg_r = bg & 31, bg_g = (bg >> 5) & 31, bg_b = (bg >> 10) & 31, fg_r = fg & 31, fg_g = (fg >> 5) & 31, fg_b = (fg >> 10) & 31;
if(bv == 0) return bg;
if(bv == 31) return fg;
r = ( ((bg_r < fg_r) ? bg_r : fg_r) - (bg_r - fg_r) * bv / 31 );
g = ( ((bg_g < fg_g) ? bg_g : fg_g) - (bg_g - fg_g) * bv / 31 );
b = ( ((bg_b < fg_b) ? bg_b : fg_b) - (bg_b - fg_b) * bv / 31 );
return r | (g << 5) | (b << 10);
}
Si vous savez comment faire, n'hésitez pas à m'expliquer l'algorithme ou a me passer un bout de code !
Merci d'avance ! :D
Bon voilà j'essaie de réaliser une fonction qui mélange deux couleurs avec un coeff donné.
Exemple, je lui donne noir et blanc, 50% et ca me sort du gris.
Et donc ... j'y arrive pas ! :cry:
Voilà mon code actuel qui marche à moitié (et encore), j'utilise une profondeur de 16 bits (gba/ds) :
/* blend_colors: mélange deux couleurs selont un coeff
bg = couleur d'arrière-plan
fg = couleur de premier-plan
bv = coeff (de 0 à 31) du mélange: 0 -> bg, 31 -> fg
*/
static inline u16 blend_colors(u16 bg, u16 fg, u8 bv)
{
u8 r, g, b;
u8 bg_r = bg & 31, bg_g = (bg >> 5) & 31, bg_b = (bg >> 10) & 31, fg_r = fg & 31, fg_g = (fg >> 5) & 31, fg_b = (fg >> 10) & 31;
if(bv == 0) return bg;
if(bv == 31) return fg;
r = ( ((bg_r < fg_r) ? bg_r : fg_r) - (bg_r - fg_r) * bv / 31 );
g = ( ((bg_g < fg_g) ? bg_g : fg_g) - (bg_g - fg_g) * bv / 31 );
b = ( ((bg_b < fg_b) ? bg_b : fg_b) - (bg_b - fg_b) * bv / 31 );
return r | (g << 5) | (b << 10);
}
Si vous savez comment faire, n'hésitez pas à m'expliquer l'algorithme ou a me passer un bout de code !
Merci d'avance ! :D