renderImage method
Implementation
Image renderImage() {
if (mergedImage != null) {
return mergedImage!;
}
mergedImage = Image(width: width, height: height, numChannels: 4);
mergedImage!.clear();
//final pixels = mergedImage!.getBytes();
for (var li = 0; li < layers.length; ++li) {
final layer = layers[li];
if (!layer.isVisible()) {
continue;
}
final opacity = layer.opacity / 255.0;
final blendMode = layer.blendMode;
//int ns = depth == 16 ? 2 : 1;
//final srcP = layer.layerImage.getBytes();
final src = layer.layerImage;
for (var y = 0, sy = layer.top!; y < layer.height; ++y, ++sy) {
//var di = (layer.top! + y) * width * 4 + layer.left! * 4;
final dy = layer.top! + y;
for (int? x = 0, sx = layer.left; x! < layer.width; ++x, ++sx) {
final srcP = src.getPixel(x, y);
final br = srcP.r.toInt();
final bg = srcP.g.toInt();
final bb = srcP.b.toInt();
final ba = srcP.a.toInt();
if (sx! >= 0 && sx < width && sy >= 0 && sy < height) {
final dx = layer.left! + x;
final p = mergedImage!.getPixel(dx, dy);
final ar = p.r.toInt();
final ag = p.g.toInt();
final ab = p.b.toInt();
final aa = p.a.toInt();
_blend(ar, ag, ab, aa, br, bg, bb, ba, blendMode, opacity, p);
}
}
}
}
return mergedImage!;
}