package camera;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
/*
* @author Marcel Schubert
*
* Fuer die Bestimmung des Offsets
* (welcher Abschnitt des Bildes ist das Schachfeld)
* Sowie die Bestimmung
*/
public class OffsetGUI extends JFrame implements MouseListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel panel;
private char state = '1'; // 1 fuer koord1, 2 fuer koord2, n fuer fertig
private int offsetX1, offsetX2, offsetY1, offsetY2;
private ImageLoader im;
private boolean offset = true;
/*
* Es wird entweder der offset berechnet (also exakte koordinaten des
* schachfelds) oder die Punkte fuer den Vektor uebergeben, welche fuer die
* Winkelberechnung zustaendig sind
*
* @param bu Bild, welches zur Bearbeitung uebergeben wird
*
* @param im ImageLoaderinstanz, an welche berechneten Werte uebergeben
* werden sollen
*
* @param offset Modus, ob offset oder winkel berechnet werde soll
*/
public OffsetGUI(BufferedImage bu, ImageLoader im, boolean offset) {
this.offset = offset;
this.im = im;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(100, 100); // einmal bereitsstellen, spaeter die Bounds nochmal
// anpassen
panel = new PaintImage(bu);
panel.addMouseListener(this);
getContentPane().add(panel);
setVisible(true);
// int sizeHeight = bu.getHeight() + (int)
// getContentPane().getBounds().getHeight();
// int sizeWidth = bu.getWidth() + (int)
// getContentPane().getBounds().getWidth();
/*
* noch dynamisch anpassen... hat bislang nicht geklappt!
*/
int sizeHeight = bu.getHeight() + 37;
int sizeWidth = bu.getWidth() + 15;
setSize(sizeWidth, sizeHeight); // richtige Groesse setzen
}
public char getStatus() {
return state;
}
public void mouseClicked(MouseEvent e) {
// erster Klick, offset oben links, zweiter Klick, offset oben rechts
switch (state) {
case '1':
if (offset) { // Modus:offset wird bestimmt
offsetX1 = e.getX();
offsetY1 = e.getY();
} else { // Modus:winkel wird bestimmt
im.setVecA(e.getX(), e.getY());
}
state = '2';
break;
case '2':
if (offset) { // modus: offset
offsetX2 = e.getX();
offsetY2 = e.getY();
im.setOffset(offsetX1, offsetY1, offsetX2, offsetY2);
} else { // modus: winkel
im.setVecB(e.getX(), e.getY());
}
state = 'n';
setVisible(false);
dispose();
break;
case 'n':
System.out.println("neu kalibrieren");
break;
}
}
public void mouseReleased(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}