renderImage method

Image renderImage()

Implementation

Image renderImage() {
  if (mergedImage != null) {
    return mergedImage!;
  }

  mergedImage = Image(width, height);
  mergedImage!.fill(0);

  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();

    for (var y = 0, sy = layer.top!, si = 0; y < layer.height; ++y, ++sy) {
      var di = (layer.top! + y) * width * 4 + layer.left! * 4;
      for (int? x = 0, sx = layer.left; x! < layer.width; ++x, ++sx) {
        final br = srcP[si++];
        final bg = srcP[si++];
        final bb = srcP[si++];
        final ba = srcP[si++];

        if (sx! >= 0 && sx < width && sy >= 0 && sy < height) {
          final ar = pixels[di];
          final ag = pixels[di + 1];
          final ab = pixels[di + 2];
          final aa = pixels[di + 3];

          _blend(
              ar, ag, ab, aa, br, bg, bb, ba, blendMode, opacity, pixels, di);
        }

        di += 4;
      }
    }
  }

  return mergedImage!;
}