transformPixels method
Implementation
Future<Image> transformPixels(
Color Function(Color) transform, {
bool reversePremultipliedAlpha = true,
}) async {
final pixelData = await pixelsInUint8();
final newPixelData = Uint8List(pixelData.length);
for (var i = 0; i < pixelData.length; i += 4) {
final r = pixelData[i + 0] / 255;
final g = pixelData[i + 1] / 255;
final b = pixelData[i + 2] / 255;
final a = pixelData[i + 3] / 255;
final d = a == 0 || !reversePremultipliedAlpha ? 1 : a;
// Reverse the pre-multiplied alpha.
final color = Color.from(
alpha: a,
red: r / d,
green: g / d,
blue: b / d,
);
final newColor = a == 0 ? color : transform(color);
final newR = newColor.r;
final newG = newColor.g;
final newB = newColor.b;
// Pre-multiply the alpha back into the new color.
newPixelData[i + 0] = (newR * d * 255).round();
newPixelData[i + 1] = (newG * d * 255).round();
newPixelData[i + 2] = (newB * d * 255).round();
newPixelData[i + 3] = pixelData[i + 3];
}
return fromPixels(newPixelData, width, height);
}