hsbToRgb static method

RgbColor hsbToRgb(
  1. HsbColor hsbColor
)

Converts a HSB color to a RGB color.

Implementation

static RgbColor hsbToRgb(HsbColor hsbColor) {
  final hsb = hsbColor.toFactoredList();

  final hue = hsb[0];
  final saturation = hsb[1];
  final value = hsb[2];

  late double red, green, blue;

  final hueIndex = (hue * 6).floor();

  final hueFloat = (hue * 6) - hueIndex;
  final hueSegment = (hueIndex.isEven) ? 1 - hueFloat : hueFloat;

  final a = value;
  final b = value * (1 - saturation);
  final c = value * (1 - (hueSegment * saturation));

  switch (hueIndex % 6) {
    case 0:
      red = a;
      green = c;
      blue = b;
      break;
    case 1:
      red = c;
      green = a;
      blue = b;
      break;
    case 2:
      red = b;
      green = a;
      blue = c;
      break;
    case 3:
      red = b;
      green = c;
      blue = a;
      break;
    case 4:
      red = c;
      green = b;
      blue = a;
      break;
    case 5:
      red = a;
      green = b;
      blue = c;
      break;
  }

  final alpha = hsbColor.alpha / 255;

  return RgbColor.extrapolate(<double>[red, green, blue, alpha]);
}