diff options
author | Dmitry Batrak <Dmitry.Batrak@jetbrains.com> | 2016-12-19 12:05:46 +0300 |
---|---|---|
committer | Dmitry Batrak <Dmitry.Batrak@jetbrains.com> | 2016-12-19 12:05:46 +0300 |
commit | 72bc1fbce6b2f90862c7effbceb41aed66a8c19b (patch) | |
tree | b66f46aa7d64c6af0903a22cf5b5bf1cf0401a1b /idea | |
parent | 87c7039e870453d7862343e7fc30cedb914f0d17 (diff) | |
download | jdk8u_jdk-72bc1fbce6b2f90862c7effbceb41aed66a8c19b.tar.gz |
utility to capture result of on-screen paintingjb8u112-b622
Diffstat (limited to 'idea')
-rw-r--r-- | idea/java/tests/src/ScreenPaintingCaptor.java | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/idea/java/tests/src/ScreenPaintingCaptor.java b/idea/java/tests/src/ScreenPaintingCaptor.java new file mode 100644 index 0000000000..26347a3b43 --- /dev/null +++ b/idea/java/tests/src/ScreenPaintingCaptor.java @@ -0,0 +1,47 @@ +import java.awt.*; +import java.awt.image.BufferedImage; +import java.util.function.Consumer; +import javax.swing.*; + +public class ScreenPaintingCaptor { + public static BufferedImage capture(int width, int height, Consumer<Graphics2D> painter) throws Exception { + JFrame[] f = new JFrame[1]; + Point[] p = new Point[1]; + SwingUtilities.invokeAndWait(() -> { + f[0] = new JFrame(); + JComponent c = new MyComponent(painter); + f[0].add(c); + c.setSize(width + 2, height + 2); + f[0].setSize(width + 100, height + 100); // giving some space for frame border effects, e.g. rounded frame + c.setLocation(50, 50); + f[0].setVisible(true); + p[0]= c.getLocationOnScreen(); + }); + Robot r = new Robot(); + while (!Color.black.equals(r.getPixelColor(p[0].x, p[0].y))) { + Thread.sleep(100); + } + BufferedImage i = r.createScreenCapture(new Rectangle(p[0].x + 1, p[0].y + 1, width, height)); + SwingUtilities.invokeAndWait(f[0]::dispose); + return i; + } + + private static class MyComponent extends JComponent { + private final Consumer<Graphics2D> painter; + + private MyComponent(Consumer<Graphics2D> painter) { + this.painter = painter; + } + + @Override + protected void paintComponent(Graphics g) { + g.translate(1, 1); + Shape savedClip = g.getClip(); + g.clipRect(0, 0, getWidth() - 2, getHeight() - 2); + painter.accept((Graphics2D)g); + g.setClip(savedClip); + g.setColor(Color.black); + g.drawRect(-1, -1, getWidth() - 1, getHeight() - 1); + } + } +} |