418
418
gimp_rgb_to_hwb (const GimpRGB *rgb,
423
423
/* RGB are each on [0, 1]. W and B are returned on [0, 1] and H is */
424
424
/* returned on [0, 6]. Exception: H is returned UNDEFINED if W == 1 - B. */
462
462
gimp_hwb_to_rgb (gdouble hue,
467
467
/* H is given on [0, 6] or UNDEFINED. whiteness and
468
468
* blackness are given on [0, 1].
568
h = 60.0 * (g - b) / delta;
568
h = 60.0 * (g - b) / delta;
570
h = 120 + 60.0 * (b - r) / delta;
570
h = 120 + 60.0 * (b - r) / delta;
572
h = 240 + 60.0 * (r - g) / delta;
572
h = 240 + 60.0 * (r - g) / delta;
580
580
*red = ROUND (h);
628
628
t = v * (1.0 - (s * (1.0 - f)));
633
*hue = ROUND (v * 255.0);
634
*saturation = ROUND (t * 255.0);
635
*value = ROUND (p * 255.0);
639
*hue = ROUND (q * 255.0);
640
*saturation = ROUND (v * 255.0);
641
*value = ROUND (p * 255.0);
645
*hue = ROUND (p * 255.0);
646
*saturation = ROUND (v * 255.0);
647
*value = ROUND (t * 255.0);
651
*hue = ROUND (p * 255.0);
652
*saturation = ROUND (q * 255.0);
653
*value = ROUND (v * 255.0);
657
*hue = ROUND (t * 255.0);
658
*saturation = ROUND (p * 255.0);
659
*value = ROUND (v * 255.0);
663
*hue = ROUND (v * 255.0);
664
*saturation = ROUND (p * 255.0);
665
*value = ROUND (q * 255.0);
633
*hue = ROUND (v * 255.0);
634
*saturation = ROUND (t * 255.0);
635
*value = ROUND (p * 255.0);
639
*hue = ROUND (q * 255.0);
640
*saturation = ROUND (v * 255.0);
641
*value = ROUND (p * 255.0);
645
*hue = ROUND (p * 255.0);
646
*saturation = ROUND (v * 255.0);
647
*value = ROUND (t * 255.0);
651
*hue = ROUND (p * 255.0);
652
*saturation = ROUND (q * 255.0);
653
*value = ROUND (v * 255.0);
657
*hue = ROUND (t * 255.0);
658
*saturation = ROUND (p * 255.0);
659
*value = ROUND (v * 255.0);
663
*hue = ROUND (v * 255.0);
664
*saturation = ROUND (p * 255.0);
665
*value = ROUND (q * 255.0);
718
718
delta = (max - min);
721
s = 255 * (gdouble) delta / (gdouble) (max + min);
721
s = 255 * (gdouble) delta / (gdouble) (max + min);
723
s = 255 * (gdouble) delta / (gdouble) (511 - max - min);
723
s = 255 * (gdouble) delta / (gdouble) (511 - max - min);
726
h = (g - b) / (gdouble) delta;
726
h = (g - b) / (gdouble) delta;
727
727
else if (g == max)
728
h = 2 + (b - r) / (gdouble) delta;
728
h = 2 + (b - r) / (gdouble) delta;
730
h = 4 + (r - g) / (gdouble) delta;
730
h = 4 + (r - g) / (gdouble) delta;
736
736
else if (h > 255)
740
740
*red = ROUND (h);
938
938
* @saturation: Pointer to saturation channel (0..1)
939
939
* @value: Pointer to value channel (0..1)
943
gimp_rgb_to_hsv4 (guchar *rgb,
942
gimp_rgb_to_hsv4 (const guchar *rgb,
948
947
gdouble red, green, blue;
981
980
delta = max - min;
983
982
if (delta == 0.0)
987
h = (green - blue) / delta;
986
h = (green - blue) / delta;
988
987
else if (green == max)
989
h = 2 + (blue - red) / delta;
988
h = 2 + (blue - red) / delta;
990
989
else if (blue == max)
991
h = 4 + (red - green) / delta;
990
h = 4 + (red - green) / delta;
997
996
else if (h > 1.0)