getColorFromXyz static method

int getColorFromXyz(
  1. double x,
  2. double y,
  3. double z,
  4. double opacity,
)

Implementation

static int getColorFromXyz(double x, double y, double z, double opacity) {
  final double xp = x / 100;
  final double yp = y / 100;
  final double zp = z / 100;

  final Map<String, double> rgb = {
    'r': xp * 3.2406 + yp * -1.5372 + zp * -0.4986,
    'g': xp * -0.9689 + yp * 1.8758 + zp * 0.0415,
    'b': xp * 0.0557 + yp * -0.2040 + zp * 1.0570
  };

  final Map<String, int> resultRgb = {};

  rgb.forEach((key, value) {
    if (value > 0.0031308) {
      rgb[key] = 1.055 * pow(value, 1 / 2.4) - 0.055;
    } else {
      rgb[key] = value * 12.92;
    }
    resultRgb[key] = (rgb[key]! * 255).toInt();
  });

  return ((((opacity * 0xff ~/ 1) & 0xff) << 24) |
          ((resultRgb['r']! & 0xff) << 16) |
          ((resultRgb['g']! & 0xff) << 8) |
          ((resultRgb['b']! & 0xff) << 0)) &
      0xFFFFFFFF;
}