package com.niklim.clicktrace.service; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; import java.util.List; import javax.imageio.ImageIO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.niklim.clicktrace.Icons; import com.niklim.clicktrace.model.Click; public class ScreenShotUtils { private static Logger log = LoggerFactory.getLogger(ScreenShotUtils.class); private static BufferedImage mouseMarkLeft; private static BufferedImage mouseMarkRight; static { try { mouseMarkLeft = loadMouseMark(Icons.MOUSE_MARK_RED_LEFT); mouseMarkRight = loadMouseMark(Icons.MOUSE_MARK_RED_RIGHT); } catch (Exception e) { log.error("Unable to load mouse mark icons", e); } } private static BufferedImage loadMouseMark(String icon) throws IOException { URL file = Thread.currentThread().getContextClassLoader().getResource(icon); return ImageIO.read(file); } public static BufferedImage markClicks(BufferedImage image, List<Click> clicks) { Graphics2D g = image.createGraphics(); int clickIndex = 1; for (Click click : clicks) { drawMark(g, clickIndex, click); clickIndex++; } g.dispose(); return image; } private static void drawMark(Graphics2D g, int clickIndex, Click click) { g.setColor(Color.RED); g.drawOval(click.getX() - 15, click.getY() - 15, 30, 30); if (click.getButton() == Click.Button.RIGHT) { g.drawImage(mouseMarkRight, click.getX() + 10, click.getY() - 25, null); } else { g.drawImage(mouseMarkLeft, click.getX() + 10, click.getY() - 25, null); } g.drawChars(String.valueOf(clickIndex).toCharArray(), 0, 1, click.getX() - 15, click.getY() - 15); } }