Voila, j'ai écrit ces deux fonctions avec tes formules:
void Rgb2Yuv(ColorYUV *yuv,char r,char g,char b)
{
double y,u,v;
y=(0.257 * r) + (0.504 * g) + (0.098 * b) + 16 + 0.5;
u=(0.439 * r) - (0.368 * g) - (0.071 * b) + 128 + 0.5;
v=-(0.148 * r) - (0.291 * g) + (0.439 * b) + 128 +0.5;
if (y>255) y=255;
if (u>255) u=255;
if (v>255) v=255;
yuv->y=(char) floor(y);
yuv->u=(char) floor(u);
yuv->v=(char) floor(v);
}
void Yuv2Rgb(ColorRGB *rgb,char y,char u,char v)
{
double r,g,b;
r=1.164*(y - 16) + 1.596*(u - 128) + 0.5;
g=1.164*(y - 16) - 0.813*(u - 128) - 0.391 * (v - 128) + 0.5;
b=1.164*(y - 16) + 2.018*(v - 128) + 0.5;
if (r>255) r=255;
if (g>255) g=255;
if (b>255) b=255;
rgb->r=(char) floor(r);
rgb->g=(char) floor(g);
rgb->b=(char) floor(b);
}
Mon problème est le suivant:
Quand je convertis une couleur RGB en YUV et que je la reconvertis immédiatement après en RGB, la couleur d'arrivée est complètement différente de la couleur de départ...
Comment ça se fait, on devrait obtenir la même couleur après une conversion RGB->YUV->RGB.