renderImage method

Image renderImage()

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!;
}