From 5f557fbb737d21d738366713da4b1bf8f1155496 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9tro?= <yann.roberge@polymtl.ca> Date: Sat, 29 May 2021 13:20:17 -0400 Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20de=20la=20conversion=20HS?= =?UTF-8?q?V->RGB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rgb2hsv.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/rgb2hsv.c b/rgb2hsv.c index 60b175e..49a6d0f 100644 --- a/rgb2hsv.c +++ b/rgb2hsv.c @@ -34,11 +34,11 @@ void rgb2hsv(PixelHSV* hsv, PixelRGB8* rgb) { } else if (r >= g && r >= b) { maxComp = r; - if (g < b) { - minComp = g; + if (g >= b) { + minComp = b; } else { - minComp = b; + minComp = g; } tempSubtract = g - b; } @@ -90,5 +90,48 @@ void rgb2hsv(PixelHSV* hsv, PixelRGB8* rgb) { void hsv2rgb(PixelRGB8* rgb, PixelHSV* hsv) { //TODO: Implémenter + int hueMSB = (int)hsv->hue & 0x1C0; + int hueLSB = (int)hsv->hue & 0x03F; + + int tempVS = hsv->value * hsv->sat; + int vMinusVS = hsv->value - tempVS; + int evenMSB = hsv->value - ( (tempVS * hueLSB) / 0x40); + int oddMSB = hsv->value - ( (tempVS * (0x40 - hueLSB)) / 0x40); + + // Formulas for HueMBS shifted down by 1 + // so as to take the hue offset into account + // (equation 6.69 in Bailey does not) + switch (hueMSB >> 6) { + case 0: + rgb->red = hsv->value; + rgb->green = vMinusVS; + rgb->blue = evenMSB; + break; + case 1: + rgb->red = hsv->value; + rgb->green = oddMSB; + rgb->blue = vMinusVS; + break; + case 2: + rgb->red = evenMSB; + rgb->green = hsv->value; + rgb->blue = vMinusVS; + break; + case 3: + rgb->red = vMinusVS; + rgb->green = hsv->value; + rgb->blue = oddMSB; + break; + case 4: + rgb->red = vMinusVS; + rgb->green = evenMSB; + rgb->blue = hsv->value; + break; + case 5: + rgb->red = oddMSB; + rgb->green = vMinusVS; + rgb->blue = hsv->value; + break; + } } -- GitLab