Create a "C:\\CanDelete" directory before running any of this, or change the path building.
Take a screenshot of each monitor individually:
package com.blogspot.whileonefork.screencapture; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.Robot; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class EachMonitor { public static void main(String[] argv) throws Exception { //Take a screenshot of every monitor GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] screens = ge.getScreenDevices(); for (GraphicsDevice screen : screens) { Robot robotForScreen = new Robot(screen); Rectangle screenBounds = screen.getDefaultConfiguration().getBounds(); //The screen bounds have an annoying tendency to have an offset x/y; we want (0,0) => (width, height) screenBounds.x = 0; screenBounds.y = 0; BufferedImage screenShot = robotForScreen.createScreenCapture(screenBounds); String ext = "jpg"; String outputFile = "C:\\CanDelete\\screenshot_" + screen.getIDstring().replaceAll("[^A-Za-z0-9]", "_") + "." + ext; ImageIO.write(screenShot, ext, new File(outputFile)); System.out.println("Saved " + outputFile + " of " + screen.getIDstring() + " xy=(" + screenBounds.x + "," + screenBounds.y + ")" + " bounds=("+ screenBounds.width + "," + screenBounds.height + ")"); } } }
Take a single big screenshot of all monitors:
package com.blogspot.whileonefork.screencapture; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.Robot; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class AllMonitors { public static void main(String[] argv) throws Exception { /** * Take one big screenshot of the entire UI. * On my Windows box monitors seem to act like they are side by side on X, extending on Y. * Seems, at least on windows, to ignore any offset config setup in display properties. */ GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice[] screens = ge.getScreenDevices(); Rectangle allScreenBounds = new Rectangle(); for (GraphicsDevice screen : screens) { Rectangle screenBounds = screen.getDefaultConfiguration().getBounds(); allScreenBounds.width += screenBounds.width; allScreenBounds.height = Math.max(allScreenBounds.height, screenBounds.height); } Robot robot = new Robot(); BufferedImage screenShot = robot.createScreenCapture(allScreenBounds); String ext = "jpg"; String outputFile = "C:\\CanDelete\\AllMonitors" + "." + ext; ImageIO.write(screenShot, ext, new File(outputFile)); System.out.println("Saved " + outputFile + " of all monitors " + " xy=(" + allScreenBounds.x + "," + allScreenBounds.y + ")" + " bounds=("+ allScreenBounds.width + "," + allScreenBounds.height + ")"); } }
All this has been tested exactly once on a Windows box with two monitors of substantially different size; ymmv :)
53 comments:
This seems to give errors when the first monitor is lower than the following monitors. If anyone else runs into this problem a corrected version can be found below. Also note that this version does not save a file, and instead returns a buffered image.
package book;
import java.awt.AWTException;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.util.logging.Level;
import java.util.logging.Logger;
public class AllMonitors {
public BufferedImage getScreenshot() {
//get handle to graphics environment
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] screens = ge.getScreenDevices();
//if screens are detected proceed
if (screens.length > 0) {
try {
//get the first screen
GraphicsDevice a = screens[0];
//get the monitor resolution
Toolkit t = Toolkit.getDefaultToolkit();
Rectangle allScreenBounds = new Rectangle(t.getScreenSize());
//offset screen capture (in cases where first monitor is not the
//highest this will come into effect)
allScreenBounds.y = -1 * screens[0].getDefaultConfiguration().getBounds().y;
//take screenshot
Robot robot = new Robot();
BufferedImage screenShot = robot.createScreenCapture(allScreenBounds);
return screenShot;
} catch (AWTException ex) {
Logger.getLogger(AllMonitors.class.getName()).log(Level.SEVERE, null, ex);
}
}
//if no screens detected return null
return null;
}
}
The code to compute the virtual screen bounds can be found in the jdk's javadoc (http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/GraphicsConfiguration.html):
Rectangle virtualBounds = new Rectangle();
GraphicsEnvironment ge = GraphicsEnvironment.
getLocalGraphicsEnvironment();
GraphicsDevice[] gs =
ge.getScreenDevices();
for (int j = 0; j < gs.length; j++) {
GraphicsDevice gd = gs[j];
GraphicsConfiguration[] gc =
gd.getConfigurations();
for (int i=0; i < gc.length; i++) {
virtualBounds =
virtualBounds.union(gc[i].getBounds());
}
}
Thanks for this post, but especially +1000 to Dustin. If I had hair, I would have pulled it all out over this bug. Your comment saved me a lot of aggravation.
add this to the end of the for loop and it will work with as many monitors as you have ::: allScreenBounds.x=Math.min(allScreenBounds.x, screenBounds.x);
allScreenBounds.y=Math.min(allScreenBounds.y, screenBounds.y);
add this to the end of the for loop and it will work with as many monitors as you have ::: allScreenBounds.x=Math.min(allScreenBounds.x, screenBounds.x);
allScreenBounds.y=Math.min(allScreenBounds.y, screenBounds.y);
Thanks for sharing the info, keep up the good work going.... I really enjoyed exploring your site. good resource...best modem router combo
I appreciate that you produced this wonderful article to help us get more knowledge about this topic. I know, it is not an easy task to write such a big article in one day, I've tried that and I've failed. But, here you are, trying the big task and finishing it off and getting good comments and ratings. That is one hell of a job done!
Data Science course in Chennai
Data science course in bangalore
Data science course in pune
Data science online course
Data Science Interview questions and answers
Data Science Tutorial
Nice tutorial. Thanks for sharing the valuable information. it’s really helpful. Who want to learn this blog most helpful. Keep sharing on updated tutorials…
Best Devops Training in pune
Devops Training in Bangalore
Microsoft azure training in Bangalore
Power bi training in Chennai
nice one...!
t shirt printing in perth
Amazon Quiz Answers Today
Deals Ki Dunia
Thanks for Sharing Such an useful & Informative Stuff...
data science tutorial
I finally found great post here.I will get back here. I just added your blog to my bookmark sites. thanks.Quality posts is the crucial to invite the visitors to visit the web page, that's what this web page is providing.
data analytics courses
ExcelR Data Science training in Mumbai
data science interview questions
ExcelR Business Analytics courses in Mumbai
I have read your blog its very attractive and impressive. I like it your blog...
Data Science Training in Bangalore
Data Science Courses in Bangalore
Thanks for sharing the info, keep up the good work going....You may have to try get clash of magic apk
Great post i must say and thanks for the information. Education is definitely a sticky subject. However, is still among the leading topics of our time. I appreciate your post and look forward to more.
digital marketing courses mumbai
This article contains some of the most informative content I've read in quite some time. The points of this content are clear-cut and engaging. I think much like this writer.
SAP training in Kolkata
Best SAP training in Kolkata
SAP training institute in Kolkata
There are numerous parts of this article on which I agree with you. You have created neural connections in my mind not utilized frequently. Much thanks to you for getting my neurons bouncing.
Denial management software
Denials management software
Hospital denial management software
Self Pay Medicaid Insurance Discovery
Uninsured Medicaid Insurance Discovery
Medical billing Denial Management Software
Self Pay to Medicaid
Charity Care Software
Patient Payment Estimator
Underpayment Analyzer
Claim Status
Well Said, you have furnished the right information that will be useful to anyone at all time. Thanks for sharing your Ideas.
Web Designing Training Course in Chennai | Certification | Online Course Training | Web Designing Training Course in Bangalore | Certification | Online Course Training | Web Designing Training Course in Hyderabad | Certification | Online Course Training | Web Designing Training Course in Coimbatore | Certification | Online Course Training | Web Designing Training Course in Online | Certification | Online Course Training
Excellent blog with lots of information, keep sharing. I am waiting for your more posts like this or related to any other informative topic.
Data Science Training In Chennai | Certification | Data Science Courses in Chennai | Data Science Training In Bangalore | Certification | Data Science Courses in Bangalore | Data Science Training In Hyderabad | Certification | Data Science Courses in hyderabad | Data Science Training In Coimbatore | Certification | Data Science Courses in Coimbatore | Data Science Training | Certification | Data Science Online Training Course
Thank you for this informative blog
python training in bangalore | python online training
artificial intelligence training in bangalore | artificial intelligence online training
machine learning training in bangalore | machine learning online training
blockchain training in bangalore | blockchain online training
uipath training in bangalore | uipath online training
Much obliged for this post, yet particularly +1000 to Dustin. In the event that I had hair, I would have hauled everything out over this bug. Your remark spared me a great deal of disturbance....
rooftop snipers
Having read this I believed it was really informative. I appreciate you taking the time and effort to put this informative article together. I once again find myself spending a lot of time both reading and posting comments. But so what, it was still worth it!
Buy Instagram Likes $1
I would like to thank you for the efforts you have made in writing this article. I am hoping the same best work from you in the future as well..
data scientist training and placement in hyderabad
Thank you for sharing this information; keep up the good work.... I had a great time looking at your website. a useful resource..
VAPOR VM
This is an excellent tutorial. Thank you for sharing such useful information. It's quite beneficial. This site is very useful for those who want to learn. Continue to share updated tutorials.....
linkedin vaporvm
Thank you quite much for discussing this type of helpful informative article. Will certainly stored and reevaluate your Website.
AWS Training in Hyderabad
Wow. That is so elegant and logical and clearly explained. Brilliantly goes through what could be a complex process and makes it obvious. Thanks for Sharing This Article. It is very so much valuable content. Digital marketing training
Very nice blogs!!! i have to learning for lot of information for this sites…Sharing for wonderful information. Thanks for sharing this valuable information to our vision. You have posted a trust worthy blog keep sharing Digital marketing
very well explained. I would like to thank you for the efforts you had made for writing this awesome article. This article inspired me to read more. Keep it up. Digital marketing training Mumbai
Thank you so much for sharing this pretty post, it was so good to read and useful to improve my knowledge as updated one, keep blogging. digital marketing course Mumbai
We are really grateful for your blog post. You will find a lot of approaches after visiting your post. Great work
full stack web development course in malaysia
360DigiTMG, the top-rated organisation among the most prestigious industries around the world, is an educational destination for those looking to pursue their dreams around the globe. The company is changing careers of many people through constant improvement, 360DigiTMG provides an outstanding learning experience and distinguishes itself from the pack. 360DigiTMG is a prominent global presence by offering world-class training. Its main office is in India and subsidiaries across Malaysia, USA, East Asia, Australia, Uk, Netherlands, and the Middle East.
I really loved reading your blog. It was very well authored and easy to understand. Unlike other blogs I have read which are really not that good.Thanks alot! data science training in mysore
I have read your article; it is very informative and helpful for me. I admire the valuable information you offer in your articles. Thanks for posting it. data science course in surat
It become an attractive part of a blog when author uses indirect speech while writing a blog. It shows your creative mind as well as make your written essay different from others.
devops training in bangalore
devops course in bangalore
aws training in bangalore
The author provides clear and concise Java code snippets for capturing screenshots of multiple monitors. These snippets are well-documented and helpful for anyone working on similar tasks.
Is iim skills fake?
The author offers succinct and understandable Java code samples for taking screenshots on several monitors. For anyone working on related jobs, these snippets are beneficial and well-documented.
Data Analytics Courses in Agra
"An insightful read!
Digital Marketing Courses in Hamburg
This is a wonderfully intriguing post. I've been seeking this type of information and found it enjoyable to read. Please continue to publish. Thanks for sharing.
daa Analytics courses in leeds
Great piece! I appreciate you sharing this valuable information. Please continue to do so.
Great piece! I appreciate you sharing this valuable information. Please continue to do so.
The blog post provides valuable insights and collection of Java snippets for capturing screenshots across multiple monitors. thanks for sharing valuable blog.
Digital Marketing Courses in Italy
Great code snippets! Your detailed comments make it easy to understand and implement. Thanks for sharing this useful Java multi-monitor screenshot solution.
How Digital marketing is changing business
The blog post provides great tutorial on Java multi-monitor screenshots.
Investment banking training Programs
Java's class allows developers to programmatically capture screen content, providing flexibility for applications that operate on multiple monitors. This feature proves beneficial in scenarios where precise monitoring, visual validation, or documentation of multi-monitor setups is essential. nice article.
Data analytics framework
Wonderful idea and some really useful code as well. Thanks for sharing.
Investment banking analyst jobs
Great article on capturing screenshots across multiple monitors in Java! This can be a tricky task, and I appreciate how you broke down the process for handling different screen configurations. The code examples are especially helpful for understanding how to capture and stitch together screenshots from different monitors. It would be interesting to see some tips on optimizing performance when working with high-resolution displays or how to handle various screen aspect ratios. Thanks for sharing this valuable resource!
Digital Marketing Course In Hyderabad
Fantastic guide on capturing multi-monitor screenshots in Java! Your clear instructions and practical tips will surely help many developers streamline their workflow. Keep sharing your expertise; it’s inspiring to see how you tackle such niche topics!
Data Science Courses in Singapore
thanks for sharing good technical content on Java
helpful for real time coders
data analytics courses in Singapore
"Great article! I love how you explained the process of taking multi-monitor screenshots in Java. The tips and code snippets are really helpful for anyone looking to implement this feature. Thanks for sharing!"
Digital Marketing Course In Hyderabad
This is a fantastic resource for anyone looking to capture screenshots across multiple monitors using Java! I love how you’ve provided both individual and combined screenshot methods, which offers flexibility depending on user needs. Data science courses in Mysore
I have gone through your blog. It was really informative and helpful for monitoring the screenshot.
Thank you for sharing.
Data science Courses in Germany
"Java multi-monitor screenshot functionality is useful for capturing the entire workspace across multiple screens. It can enhance the way you monitor and manage applications in a multi-display setup."
Data Science Course in Chennai
Nice tutorial. Thanks for sharing the valuable information. it’s really helpful. Data science courses in France
Post a Comment