Skip to content

Commit d2d9a40

Browse files
authored
Merge pull request #569 from gubjack/capture-resolution
Allow resolution adaption of the captured screen
2 parents 0e0ccae + ffbcacf commit d2d9a40

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

webcam-capture-drivers/driver-screencapture/src/main/java/com/github/sarxos/webcam/ds/gstreamer/ScreenCaptureDevice.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import java.awt.AWTException;
44
import java.awt.Dimension;
55
import java.awt.DisplayMode;
6+
import java.awt.Graphics2D;
67
import java.awt.GraphicsConfiguration;
78
import java.awt.GraphicsDevice;
89
import java.awt.Rectangle;
10+
import java.awt.RenderingHints;
911
import java.awt.Robot;
1012
import java.awt.image.BufferedImage;
1113

@@ -59,14 +61,28 @@ public Dimension getResolution() {
5961

6062
@Override
6163
public void setResolution(Dimension size) {
62-
// do nothings, screen has only one resolution which is already set
64+
resolution.setSize(size.getWidth(), size.getHeight());
6365
}
6466

6567
@Override
6668
public BufferedImage getImage() {
6769
final GraphicsConfiguration gc = device.getDefaultConfiguration();
6870
final Rectangle bounds = gc.getBounds();
69-
return robot.createScreenCapture(bounds);
71+
BufferedImage screen = robot.createScreenCapture(bounds);
72+
int width = resolution.width;
73+
int height = resolution.height;
74+
if (screen.getWidth() == width && screen.getHeight() == height) {
75+
return screen; // No need for adaption
76+
}
77+
BufferedImage img = new BufferedImage(width, height, screen.getType());
78+
Graphics2D g = img.createGraphics();
79+
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
80+
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
81+
g.drawImage(screen, 0, 0, width, height,
82+
0, 0, screen.getWidth(), screen.getHeight(),
83+
null);
84+
g.dispose();
85+
return img;
7086
}
7187

7288
@Override

0 commit comments

Comments
 (0)