packagesc;import java.io.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.awt.image.*;import javax.imageio.*;public classTScreenCapture
{public static void main(String[] args) throwsException
{
String userdir= System.getProperty("user.dir");
File tempFile= new File("d:", "temp.png");
TScreenCapture capture=TScreenCapture.getInstance();
capture.captureImage();
JFrame frame= newJFrame();
JPanel panel= newJPanel();
panel.setLayout(newBorderLayout());
JLabel imagebox= newJLabel();
panel.add(BorderLayout.CENTER, imagebox);
imagebox.setIcon(capture.getPickedIcon());
capture.saveToFile(tempFile);
capture.captureImage();
imagebox.setIcon(capture.getPickedIcon());
frame.setContentPane(panel);
frame.setSize(400, 300);
frame.show();
System.out.println("Over");
}privateTScreenCapture()
{try{
robot= newRobot();
}catch(AWTException e) {
System.err.println("Internal Error: " +e);
e.printStackTrace();
}
JPanel cp=(JPanel) dialog.getContentPane();
cp.setLayout(newBorderLayout());
labFullScreenImage.addMouseListener(newMouseAdapter() {public voidmouseReleased(MouseEvent evn) {
isFirstPoint= true;
pickedImage=fullScreenImage.getSubimage(recX, recY, recW,
recH);
dialog.setVisible(false);
}
});
labFullScreenImage.addMouseMotionListener(newMouseMotionAdapter() {public voidmouseDragged(MouseEvent evn) {if(isFirstPoint) {
x1=evn.getX();
y1=evn.getY();
isFirstPoint= false;
}else{
x2=evn.getX();
y2=evn.getY();int maxX =Math.max(x1, x2);int maxY =Math.max(y1, y2);int minX =Math.min(x1, x2);int minY =Math.min(y1, y2);
recX=minX;
recY=minY;
recW= maxX -minX;
recH= maxY -minY;
labFullScreenImage.drawRectangle(recX, recY, recW, recH);
}
}public voidmouseMoved(MouseEvent e) {
labFullScreenImage.drawCross(e.getX(), e.getY());
}
});
cp.add(BorderLayout.CENTER, labFullScreenImage);
dialog.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
dialog.setAlwaysOnTop(true);
dialog.setMaximumSize(Toolkit.getDefaultToolkit().getScreenSize());
dialog.setUndecorated(true);
dialog.setSize(dialog.getMaximumSize());
dialog.setModal(true);
}//Singleton Pattern
public staticTScreenCapture getInstance()
{returndefaultCapturer;
}/**捕捉全屏慕*/
publicIcon captureFullScreen()
{
fullScreenImage= robot.createScreenCapture(newRectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIcon icon= newImageIcon(fullScreenImage);returnicon;
}/**捕捉屏幕的一个矫形区域*/
public voidcaptureImage()
{
fullScreenImage= robot.createScreenCapture(newRectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIcon icon= newImageIcon(fullScreenImage);
labFullScreenImage.setIcon(icon);
dialog.setVisible(true);
}/**得到捕捉后的BufferedImage*/
publicBufferedImage getPickedImage()
{returnpickedImage;
}/**得到捕捉后的Icon*/
publicImageIcon getPickedIcon() {return newImageIcon(getPickedImage());
}/*** 储存为一个文件,为PNG格式
*
*@deprecatedreplaced by saveAsPNG(File file)
**/@Deprecatedpublic void saveToFile(File file) throwsIOException {
ImageIO.write(getPickedImage(), defaultImageFormater, file);
}/**储存为一个文件,为PNG格式*/
public void saveAsPNG(File file) throwsIOException {
ImageIO.write(getPickedImage(),"png", file);
}/**储存为一个JPEG格式图像文件*/
public void saveAsJPEG(File file) throwsIOException {
ImageIO.write(getPickedImage(),"JPEG", file);
}/**写入一个OutputStream*/
public void write(OutputStream out) throwsIOException {
ImageIO.write(getPickedImage(), defaultImageFormater, out);
}//singleton design pattern
private static TScreenCapture defaultCapturer = newTScreenCapture();private intx1, y1, x2, y2;private int recX, recY, recH, recW; //截取的图像
private boolean isFirstPoint = true;private BackgroundImage labFullScreenImage = newBackgroundImage();privateRobot robot;privateBufferedImage fullScreenImage;privateBufferedImage pickedImage;private String defaultImageFormater = "png";private JDialog dialog = newJDialog();
}/**显示图片的Label*/
class BackgroundImage extendsJLabel {public voidpaintComponent(Graphics g) {super.paintComponent(g);
g.drawRect(x, y, w, h);
String area= Integer.toString(w) + " * " +Integer.toString(h);
g.drawString(area, x+ (int) w / 2 - 15, y + (int) h / 2);
g.drawLine(lineX,0, lineX, getHeight());
g.drawLine(0, lineY, getWidth(), lineY);
}public void drawRectangle(int x, int y, int width, intheight) {this.x =x;this.y =y;
h=height;
w=width;
repaint();
}public void drawCross(int x, inty) {
lineX=x;
lineY=y;
repaint();
}intlineX, lineY;intx, y, h, w;
}