import java.awt.AWTException;
import java.awt.Cursor;
import java.awt.Frame;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.jivesoftware.spark.ui.ImageSelectionPanel;
import org.jivesoftware.spark.util.SwingWorker;
public class test extends Frame{
private BufferedImage bufferedImage;
private ImageSelectionPanel selectionPanel;
private Robot robot;
public test(){
try {
robot = new Robot();
selectionPanel = new ImageSelectionPanel();
}
catch (AWTException e) {
e.printStackTrace();
}
}
public static void main(String args[]){
test t= new test();
t.sendScreenshot();
}
public void sendScreenshot() {
final SwingWorker worker = new SwingWorker() {
@Override
public Object construct() {
try {
Thread.sleep(1000);
Rectangle area = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
return robot.createScreenCapture(area);
}
catch (Throwable e) {
e.printStackTrace();
}
return null;
}
@Override
public void finished() {
bufferedImage = (BufferedImage)get();
if (bufferedImage == null) {
//error
return;
}
final Frame frame = new Frame();
frame.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
selectionPanel.setImage(bufferedImage);
selectionPanel.validate();
selectionPanel.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
Rectangle clip = selectionPanel.getClip();
BufferedImage newImage = null;
try {
newImage = bufferedImage.getSubimage((int)clip.getX(), (int)clip.getY(), (int)clip.getWidth(), (int)clip.getHeight());
}
catch (Exception e1) {
// Nothing to do
}
if (newImage != null) {
sendImage(newImage);
bufferedImage = null;
selectionPanel.clear();
}
frame.dispose();
frame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
selectionPanel.removeMouseListener(this);
}
});
frame.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyChar() == KeyEvent.VK_ESCAPE) {
frame.dispose();
frame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
});
frame.setSize(bufferedImage.getWidth(null), bufferedImage.getHeight());
frame.add(selectionPanel);
frame.setUndecorated(true);
// Determine if full-screen mode is supported directly
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gs = ge.getDefaultScreenDevice();
if (gs.isFullScreenSupported()) {
gs.setFullScreenWindow(frame);
}
else {
// Full-screen mode will be simulated
frame.setVisible(true);
}
}
};
worker.start();
}
public void sendImage(final BufferedImage image) {
File tmpDirectory = new File("d:", "/tempImages");
tmpDirectory.mkdirs();
String imageName = "image_test.png";
final File imageFile = new File(tmpDirectory, imageName);
SwingWorker writeImageThread = new SwingWorker() {
@Override
public Object construct() {
try {
// Write out file in separate thread.
ImageIO.write(image, "png", imageFile);
}
catch (IOException e) {
e.printStackTrace();
}
return true;
}
@Override
public void finished() {
//sendImage(imageFile);
}
};
writeImageThread.start();
}
}