Java Robot()屏幕截图
我试图在minecraft中拍摄一张截图(绑定到F2),将其转换为base64,然后将其发送到我的网站,但我的截图都没有返回图像,但尺寸在那里,下面是一个示例 任何帮助都将不胜感激,如果您需要更多信息,请告诉我Java Robot()屏幕截图,java,minecraft,awtrobot,Java,Minecraft,Awtrobot,我试图在minecraft中拍摄一张截图(绑定到F2),将其转换为base64,然后将其发送到我的网站,但我的截图都没有返回图像,但尺寸在那里,下面是一个示例 任何帮助都将不胜感激,如果您需要更多信息,请告诉我 Vinny使用机器人类的最佳屏幕捕获程序: import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.Rectangle; import java.awt.Rob
Vinny使用机器人类的最佳屏幕捕获程序:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.imageio.ImageIO;
public class JavaScreenCaptureUtil {
public static void main(String args[]) throws Exception {
/**
* This class (Robot.java) is used to generate native system input events for the
* purposes of test automation, self-running demos, and other
* applications where control of the mouse and keyboard is needed.
* The primary purpose of Robot is to facilitate automated testing
* of Java platform implementations.
*/
Robot robot = new Robot();
/**
* Get the current screen dimensions.
*/
Dimension d = new Dimension(Toolkit.getDefaultToolkit().getScreenSize());
int width = (int) d.getWidth();
int height = (int) d.getHeight();
/**
* Delay the robot for 5 seconds (5000 ms) allowing you to switch to proper
* screen/window whose screenshot is to be taken.
*
* You can change the delay time as required.
*/
robot.delay(5000);
/**
* Create a screen capture of the active window and then create a buffered image
* to be saved to disk.
*/
Image image = robot.createScreenCapture(new Rectangle(0, 0, width,
height));
BufferedImage bi = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = bi.createGraphics();
g.drawImage(image, 0, 0, width, height, null);
/**
* Filename where to save the file to.
* I am appending formatted timestamp to the filename.
*/
String fileNameToSaveTo = "ScreenCaptured_"
+ createTimeStampStr() + ".jpg";
/**
* Write the captured image to a file.
* I am using PNG format. You can choose PNG, JPG, GIF.
*/
writeImage(bi, fileNameToSaveTo, "PNG");
System.out.println("Screen Captured Successfully and Saved to :\n In Your Folder with Name :- "+fileNameToSaveTo);
}
/**
* This method writes a buffered image to a file
*
* @param img -- > BufferedImage
* @param fileLocation --> e.g. "C:/testImage.jpg"
* @param extension --> e.g. "jpg","gif","png"
*/
public static void writeImage(BufferedImage img, String fileLocation,
String extension) {
try {
BufferedImage bi = img;
File outputfile = new File(fileLocation);
ImageIO.write(bi, extension, outputfile);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @return String representation of timestamp
* in the format of yyyyMMdd_hhmmss (e.g. 20100426_111612)
* @throws Exception
*/
public static String createTimeStampStr() throws Exception {
Calendar mycalendar = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd_hhmmss");
String timeStamp = formatter.format(mycalendar.getTime());
return timeStamp;
}
}
愿这本书对你有所帮助:
谢谢…我已经看过这张图片了。它的属性表示图像的大小是0px x 0px,并缩放到800px x 450px.hmm,这意味着AWT机器人没有做任何事情,因为当我拍摄屏幕截图时,游戏是800px 450px,这也解释了为什么base64数据如此短。。。我可能需要考虑如何实现minecraft的屏幕截图方法
机器人
应该可以工作。您是否尝试将其保存为文件?该文件正在正确保存,因此必须与base64编码有关,或者将其发送到我的网站。然后,这就是我正在使用的base64类。您为什么不使用apache
commons?
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.imageio.ImageIO;
public class JavaScreenCaptureUtil {
public static void main(String args[]) throws Exception {
/**
* This class (Robot.java) is used to generate native system input events for the
* purposes of test automation, self-running demos, and other
* applications where control of the mouse and keyboard is needed.
* The primary purpose of Robot is to facilitate automated testing
* of Java platform implementations.
*/
Robot robot = new Robot();
/**
* Get the current screen dimensions.
*/
Dimension d = new Dimension(Toolkit.getDefaultToolkit().getScreenSize());
int width = (int) d.getWidth();
int height = (int) d.getHeight();
/**
* Delay the robot for 5 seconds (5000 ms) allowing you to switch to proper
* screen/window whose screenshot is to be taken.
*
* You can change the delay time as required.
*/
robot.delay(5000);
/**
* Create a screen capture of the active window and then create a buffered image
* to be saved to disk.
*/
Image image = robot.createScreenCapture(new Rectangle(0, 0, width,
height));
BufferedImage bi = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = bi.createGraphics();
g.drawImage(image, 0, 0, width, height, null);
/**
* Filename where to save the file to.
* I am appending formatted timestamp to the filename.
*/
String fileNameToSaveTo = "ScreenCaptured_"
+ createTimeStampStr() + ".jpg";
/**
* Write the captured image to a file.
* I am using PNG format. You can choose PNG, JPG, GIF.
*/
writeImage(bi, fileNameToSaveTo, "PNG");
System.out.println("Screen Captured Successfully and Saved to :\n In Your Folder with Name :- "+fileNameToSaveTo);
}
/**
* This method writes a buffered image to a file
*
* @param img -- > BufferedImage
* @param fileLocation --> e.g. "C:/testImage.jpg"
* @param extension --> e.g. "jpg","gif","png"
*/
public static void writeImage(BufferedImage img, String fileLocation,
String extension) {
try {
BufferedImage bi = img;
File outputfile = new File(fileLocation);
ImageIO.write(bi, extension, outputfile);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @return String representation of timestamp
* in the format of yyyyMMdd_hhmmss (e.g. 20100426_111612)
* @throws Exception
*/
public static String createTimeStampStr() throws Exception {
Calendar mycalendar = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd_hhmmss");
String timeStamp = formatter.format(mycalendar.getTime());
return timeStamp;
}
}