premulRgba8 function
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);
}