public BufferedImage generateImageFromDna(
      List<Gene> dna, GAParameters parameters, double multiplier) {
    //        long timestamp = System.currentTimeMillis();
    BufferedImage image =
        new BufferedImage(
            (int) (parameters.getTargetImage().getWidth() * multiplier),
            (int) (parameters.getTargetImage().getHeight() * multiplier),
            BufferedImage.TYPE_INT_ARGB);
    Graphics2D graphics = image.createGraphics();
    graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    graphics.setRenderingHint(
        RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_SPEED);

    drawBlackBackground(graphics, parameters, multiplier);

    for (Gene gene : dna) {
      int[] x = new int[gene.getPoints().size()];
      int[] y = new int[gene.getPoints().size()];

      for (int i = 0; i < gene.getPoints().size(); i++) {
        x[i] = (int) (gene.getPoints().get(i).getX() * multiplier);
        y[i] = (int) (gene.getPoints().get(i).getY() * multiplier);
      }

      Polygon p = new Polygon(x, y, gene.getPoints().size());
      graphics.setColor(gene.getColor());
      graphics.fillPolygon(p);
    }
    //        System.out.println("rendering took : " + (System.currentTimeMillis() - timestamp));
    return image;
  }
 private void drawBlackBackground(
     Graphics2D graphics, GAParameters parameters, double multiplier) {
   graphics.setColor(Color.BLACK);
   graphics.fillRect(
       0,
       0,
       (int) (parameters.getTargetImage().getWidth() * multiplier),
       (int) (parameters.getTargetImage().getHeight() * multiplier));
 }