[CODE lang="java" title="Der Code zu meiner Frage - Wie kriege ich das Fangrect rechtwinklig dargestellt?"]package pitsoft.image_cutter;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Stack;
import javax.imageio.ImageIO;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
/** Diese Klasse soll Images rotieren und zuschneiden
*
* @author prog
*
*/
public class ImageCutter extends JFrame implements WindowListener,MouseListener,MouseMotionListener,ActionListener
{
String[] args=null;
MediaTracker mt=new MediaTracker(this);
BufferedImage img=null;
JFileChooser fc=null;
String openSpec=null;
JPanel pnlTop=null;
JScrollPane spImage=null;
JPanel pnlImage=null;
JMenuBar menubar=null;
MenuListener menuListener=null;
JMenu menuDatei=null;
JMenuItem itemOpenImage=null;
JMenuItem itemSaveAs=null;
JMenuItem itemExit=null;
JMenu menuPicture=null;
JMenuItem itemPictureAtLinePrepare=null;
JMenuItem itemPictureAtLineDoit=null;
Point mouseClick=null;
Point mouseDrag=null;
AffineTransform atrRotate=null;
AffineTransform atrMove=null;
Stack pointStack=new Stack();
//Fang
JCheckBox cbFang=null;
JCheckBox cbMove=null;
public ImageCutter(String[] _args)
{
super();
this.args=_args;
createGui();
fc=new JFileChooser();
}
public void createGui()
{
Container cp=this.getContentPane();
cp.setLayout(new BorderLayout());
this.setSize(800,600);
pnlTop=new JPanel();
cbFang=new JCheckBox("Fang");
pnlTop.add(cbFang);
cbMove=new JCheckBox("Move");
pnlTop.add(cbMove);
spImage=new JScrollPane();
pnlImage=new JPanel()
{
public void paint(Graphics gr)
{
if (gr !=null)
{
Graphics2D gr2=(Graphics2D) gr;
super.paint(gr2);
if (img!=null)
{
// gr2.transform(atrZoom);
if (atrMove !=null)
{
gr2.transform(atrMove);
}
if (atrRotate !=null)
{
gr2.transform(atrRotate);
}
gr2.drawImage(img,0,0,Color.WHITE,null );
}
if (cbFang.isSelected() && mouseClick !=null && mouseDrag !=null)
{
gr2.setColor(Color.RED);
gr2.drawRect(mouseClick.x,mouseClick.y,mouseDrag.x-mouseClick.x,mouseDrag.y-mouseClick.y);
spImage.getVerticalScrollBar().setValue(spImage.getVerticalScrollBar().getMaximum());
}
}
}};
cp.add(pnlTop,BorderLayout.NORTH);
spImage.getViewport().add(pnlImage);
cp.add(spImage,BorderLayout.CENTER);
this.addWindowListener(this);
pnlImage.addMouseListener(this);
pnlImage.addMouseMotionListener(this);
createMenu();
setVisible(true);
}
private void createMenu()
{
//Menu
menubar=new JMenuBar();
menuListener=new MenuListener();
menuDatei=new JMenu("Datei");
itemOpenImage=new JMenuItem("Open a Image File");
// itemOpen=new JMenuItem("Open a Image File");
itemSaveAs=new JMenuItem("SaveAs");
itemExit=new JMenuItem("Exit");
menuDatei.add(itemOpenImage);
menuDatei.add(itemSaveAs);
menuDatei.add(itemExit);
menuPicture=new JMenu("Picture");
itemPictureAtLineDoit=new JMenuItem("Order On Line Doit");
itemPictureAtLinePrepare=new JMenuItem("Prepare Order On Line");
menuPicture.add(itemPictureAtLinePrepare);
menuPicture.add(itemPictureAtLineDoit);
menubar.add(menuDatei);
menubar.add(menuPicture);
this.setJMenuBar(menubar);
//Actions
itemOpenImage.addActionListener(menuListener);
itemSaveAs.addActionListener(menuListener);
/* itemOpen.addActionListener(menuListener);
itemLz.addActionListener(menuListener);
itemDelFang.addActionListener(menuListener);
itemAddPad.addActionListener(menuListener);
itemDelSelLz.addActionListener(menuListener);
itemGlueFang.addActionListener(menuListener);
itemGridX.addActionListener(menuListener);
itemGridY.addActionListener(menuListener);
itemInfo.addActionListener(menuListener);*/
itemPictureAtLinePrepare.addActionListener(menuListener);
itemPictureAtLineDoit.addActionListener(menuListener);
itemExit.addActionListener(menuListener);
// itemShowBe.addActionListener(menuListener);
}
private Image loadImage(String file)
{
Image img=null;
try
{
img =ImageIO.read(new File(file));
mt.addImage(img,0);
try
{
mt.waitForAll();
mt.checkAll(true);
System.out.println( "LoadImage" +file+ "x="+img.getWidth(null)+" y="+img.getHeight(null));
} catch (InterruptedException e) {e.printStackTrace(); }
}
catch (IOException e) { e.printStackTrace(); }
return img;
}
public double toRadiant(int inGrad )
{
//360 Grad =2 PI
double d= (inGrad*Math.PI*2)/360;
// System.out.println("Aus "+inGrad+" wird Bogenmass "+d);
return d;
}
private void saveImage(BufferedImage img,String name)
{
try {
boolean state=ImageIO.write(img, "jpg", new File(name));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args)
{
new ImageCutter(args);
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseDragged(MouseEvent me)
{
System.out.println("Mouse Dragged at "+me.getX()+"x"+me.getY());
this.mouseDrag=me.getPoint();
if (cbMove.isSelected())
{
atrMove=AffineTransform.getTranslateInstance(this.mouseDrag.x-mouseClick.x,this.mouseDrag.y-mouseClick.y);
}
repaint();
}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent me)
{
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent me) {
this.mouseClick=me.getPoint();
System.out.println("Mouse Pressed at "+mouseClick.x+"x"+mouseClick.y);
pointStack.push(mouseClick);
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowActivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowDeactivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowOpened(WindowEvent arg0) {
// TODO Auto-generated method stub
}
//#########################################################################
/*
* Handelt alle Actionen der MenuBar
*/
private class MenuListener implements ActionListener
{
public void actionPerformed(ActionEvent menuEvent)
{
Object o=menuEvent.getSource();
if (o==itemOpenImage)
{
fc=new JFileChooser();
fc.setDialogTitle("Open a Image File");
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
fc.setCurrentDirectory(new File("."));
int erg=fc.showOpenDialog(ImageCutter.this);
if (erg==JFileChooser.APPROVE_OPTION)
{
openSpec=fc.getSelectedFile().getAbsolutePath();
img=(BufferedImage) loadImage(openSpec);
pnlImage.setSize(img.getWidth(null),img.getHeight(null));
pnlImage.setPreferredSize(new Dimension(img.getWidth(null),img.getHeight(null)));
}
}//
else if (o==itemSaveAs)
{
fc.setDialogTitle("Save Layout to File");
fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
fc.setCurrentDirectory(new File("."));
int erg=fc.showSaveDialog(ImageCutter.this);
if (erg==JFileChooser.APPROVE_OPTION)
{
String saveSpec=fc.getSelectedFile().getAbsolutePath();
saveImage(img,saveSpec);
}
}
else if (o==itemPictureAtLinePrepare)
{
pointStack.clear();
JOptionPane.showMessageDialog(ImageCutter.this, "Define Point 1 and 2");
}
else if (o==itemPictureAtLineDoit)
{
Point p1=null;
Point p2=null;
Point upper=null;
Point lower=null;
p1=(Point) pointStack.pop();
p2=(Point) pointStack.pop();
//waagerechtes Ausrichten der Linie
//den höheren Punkt finden
if (p1.y < p2.y)
{
upper=p1;
lower=p2;
}
else
{
upper=p2;
lower=p1;
}
double d1=upper.y-lower.y;
double d2=upper.x-lower.x;
double winkel=-1*Math.atan(d1/d2);
// rotation=45;
// double rad=toRadiant(30);
// atrRotate.transform(new Point(0,0), new Point(imgLs.getWidth()/2,imgLs.getHeight()/2));
atrRotate= AffineTransform.getRotateInstance(winkel,p1.getX(),p1.getY()); //Rotation um rad Grad um den Punkt x,y
repaint();
}
else if (o==itemExit)
{
dispose();
System.exit(0);
}
}
}
}
[/CODE]