From c0dcef61829904994b5a71934bf62e10901c390f Mon Sep 17 00:00:00 2001 From: Hagen Stanek Date: Wed, 25 Oct 2017 05:42:28 +0000 Subject: [PATCH 1/2] Allow resolution adaption of the captured screen --- .../ds/gstreamer/ScreenCaptureDevice.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/webcam-capture-drivers/driver-screencapture/src/main/java/com/github/sarxos/webcam/ds/gstreamer/ScreenCaptureDevice.java b/webcam-capture-drivers/driver-screencapture/src/main/java/com/github/sarxos/webcam/ds/gstreamer/ScreenCaptureDevice.java index 3652c47b..bbabec8b 100644 --- a/webcam-capture-drivers/driver-screencapture/src/main/java/com/github/sarxos/webcam/ds/gstreamer/ScreenCaptureDevice.java +++ b/webcam-capture-drivers/driver-screencapture/src/main/java/com/github/sarxos/webcam/ds/gstreamer/ScreenCaptureDevice.java @@ -3,9 +3,12 @@ import java.awt.AWTException; import java.awt.Dimension; import java.awt.DisplayMode; +import java.awt.Graphics2D; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; +import java.awt.Image; import java.awt.Rectangle; +import java.awt.RenderingHints; import java.awt.Robot; import java.awt.image.BufferedImage; @@ -59,14 +62,25 @@ public Dimension getResolution() { @Override public void setResolution(Dimension size) { - // do nothings, screen has only one resolution which is already set + resolution.setSize(size.getWidth(), size.getHeight()); } @Override public BufferedImage getImage() { final GraphicsConfiguration gc = device.getDefaultConfiguration(); final Rectangle bounds = gc.getBounds(); - return robot.createScreenCapture(bounds); + BufferedImage screen = robot.createScreenCapture(bounds); + int width = resolution.width; + int height = resolution.height; + BufferedImage img = new BufferedImage(width, height, screen.getType()); + Graphics2D g = img.createGraphics(); + g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, + RenderingHints.VALUE_INTERPOLATION_BILINEAR); + g.drawImage(screen, 0, 0, width, height, + 0, 0, screen.getWidth(), screen.getHeight(), + null); + g.dispose(); + return img; } @Override From ffbcacf9844db538d4de765851df40dff8eafc76 Mon Sep 17 00:00:00 2001 From: Hagen Stanek Date: Sat, 28 Oct 2017 07:52:28 +0000 Subject: [PATCH 2/2] Avoid secondary image creation in case screen resolution is already desired resolution --- .../sarxos/webcam/ds/gstreamer/ScreenCaptureDevice.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/webcam-capture-drivers/driver-screencapture/src/main/java/com/github/sarxos/webcam/ds/gstreamer/ScreenCaptureDevice.java b/webcam-capture-drivers/driver-screencapture/src/main/java/com/github/sarxos/webcam/ds/gstreamer/ScreenCaptureDevice.java index bbabec8b..05aadee0 100644 --- a/webcam-capture-drivers/driver-screencapture/src/main/java/com/github/sarxos/webcam/ds/gstreamer/ScreenCaptureDevice.java +++ b/webcam-capture-drivers/driver-screencapture/src/main/java/com/github/sarxos/webcam/ds/gstreamer/ScreenCaptureDevice.java @@ -6,7 +6,6 @@ import java.awt.Graphics2D; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; -import java.awt.Image; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.Robot; @@ -72,6 +71,9 @@ public BufferedImage getImage() { BufferedImage screen = robot.createScreenCapture(bounds); int width = resolution.width; int height = resolution.height; + if (screen.getWidth() == width && screen.getHeight() == height) { + return screen; // No need for adaption + } BufferedImage img = new BufferedImage(width, height, screen.getType()); Graphics2D g = img.createGraphics(); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,