Screen Capture Programm - Ausschnitte auswählen

dehlen

Bekanntes Mitglied
Hallo,
ich arbeite gerade an einer kleinen App. Ich möchte gerne eine App schreiben, mit der ich ScreenCapture-Bilder machen kann und diese sollen sofort hochgeladen werden.
Nun ja im Moment hänge ich aber erstmal noch überhaupt an dem aufnehmen des Bildes. Alles klappt soweit wunderbar, doch ich nehme im Moment nur den ganzen Screen auf. Lieber würde ich dem Anwender die Möglichkeit geben einen bestimmten Ausschnitt zu wählen. Wie kann ich das ganze realisieren ? Hier mal mein Code:
Java:
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.File;
import javax.swing.JOptionPane;
import java.awt.AWTException;
import java.io.IOException;

public class ScreenCapture {

public static void main(String[] args) {
 String eingabe = JOptionPane.showInputDialog("Dateiname (ohne Endung): ");
try {
 captureScreen(eingabe);
}
catch (AWTException  e) {
System.out.println("Fehler: "+e);
}
}

public static void captureScreen(String fileName) throws AWTException {
try {
   Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
   Rectangle screenRectangle = new Rectangle(screenSize); //Hier müsste eine andere Größe rein
   Robot robot = new Robot();
   BufferedImage image = robot.createScreenCapture(screenRectangle);
   ImageIO.write(image, "png", new File("/Users/david/Desktop/"+fileName+".png"));
}
catch (AWTException  e) {
System.out.println("Fehler: "+e);
}

catch(IOException ex) {
System.out.println("Fehler: "+ex);
}


}
}
 
Hmm, vielleicht hilft ja dieser Ansatz mit einem halbtransparenten JDialog, welcher sich über den ganzen Bildschirm erstreckt:
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import com.sun.awt.AWTUtilities;

public class RectangleDialog extends JDialog {
	public RectangleDialog() {
		setUndecorated(true);
		AWTUtilities.setWindowOpacity(this, 0.5f);
		final JPanel contentPane = new JPanel() {
			private Point start;
			private Point end;
			private Rectangle rect;

			{
				setBackground(Color.WHITE);
				final MouseAdapter mouseListener = new MouseAdapter() {
					@Override
					public void mousePressed(MouseEvent e) {
						start = e.getPoint();
					}

					@Override
					public void mouseReleased(MouseEvent e) {
						start = null;
						end = null;
						refreshRect();
						repaint();
					}

					@Override
					public void mouseDragged(MouseEvent e) {
						end = e.getPoint();
						refreshRect();
						repaint();
					}

					private void refreshRect() {
						if (start == null || end == null)
							rect = null;
						else {
							final int x1, x2;
							if (start.x < end.x) {
								x1 = start.x;
								x2 = end.x;
							} else {
								x1 = end.x;
								x2 = start.x;
							}
							final int y1, y2;
							if (start.y < end.y) {
								y1 = start.y;
								y2 = end.y;
							} else {
								y1 = end.y;
								y2 = start.y;
							}
							rect = new Rectangle(x1, y1, x2 - x1, y2 - y1);
						}
					}
				};
				addMouseListener(mouseListener);
				addMouseMotionListener(mouseListener);
			}

			@Override
			protected void paintComponent(Graphics g) {
				super.paintComponent(g);
				if (rect != null)
					((Graphics2D) g).draw(rect);
			}
		};
		setContentPane(contentPane);
	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				final JDialog dialog = new RectangleDialog();
				dialog.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
				dialog.setSize(Toolkit.getDefaultToolkit().getScreenSize());
				dialog.setAlwaysOnTop(true);
				dialog.setVisible(true);
			}
		});
	}
}
Auf diesem kann man dann ein Rechteck aufziehen.
 
Hey danke das funktioniert prima und ich habe auch bereits meine Methode zum speichern des Bildes implementiert... also danke nochmal !
Nun geht's an den Upload bei irgendeinem Bild-Upload-Dienst. Kennt da jemand vllt einen Dienst der besonders einfach zu implementieren ist ? Hatte gehofft auf Authentication und XML/Json parsen herumzukommen. Vllt hat da ja jemand einen schlauen Tipp ?!

Danke !
 
Hey, danke das sieht wirklich cool aus, leider kann ich es nicht nutzen, da ich keinen Windows PC habe sondern einen Mac. Daher kann ich weder firstRun.bat noch die vbs skripte starten. Die vbs Skripte kann man sicherlich ersetzen mit anderen Skripten und die firstRun.bat kann ich auch über die Konsole starten aber das klappt dann wiederum auch nicht, denn wenn ich java -jar FlickShot.jar /login eingebe dann kann er die website zum autorisieren nicht öffnen, da er diese rundll32 ja nicht kennt.
Ne Idee wie ich es auf dem Mac zum laufen kriege ?
 

Neue Themen


Zurück
Oben