premulRgba8 function

int premulRgba8(
  1. PdfColor color,
  2. double alpha
)

Packs color at alpha into premultiplied RGBA8 (r | g<<8 | b<<16 | a<<24 - RGBA8888 memory byte order on little-endian targets).

Implementation

int premulRgba8(PdfColor color, double alpha) {
  final af = alpha < 0 ? 0.0 : (alpha > 1 ? 1.0 : alpha);
  final a = (af * 255 + 0.5).toInt();
  int chan(double c) {
    final v = c < 0 ? 0.0 : (c > 1 ? 1.0 : c);
    return ((v * 255 + 0.5).toInt() * a + 127) ~/ 255;
  }

  return chan(color.red) |
      (chan(color.green) << 8) |
      (chan(color.blue) << 16) |
      (a << 24);
}