Hallo, ich möchte ein Bild aus einer Datei laden, verkleinert anzeigen, und anschließend verkleinert abspeichern.(selber programmieren und nicht sämtliches ergooglen) Leider wird nur ein schwarzes Rechteck abgespeichert, und ich Newb weiß jetzt natürlich nicht, wieso. Nicht wundern über die Kommentare, das waren alte Programmteile die ich nicht löschen wollte. Der fehler liegt meines Erachtens in
.
Außerdem wäre es nett, wenn der Unterschied zwischen Image, ImageIcon, Buffered image etc. kurz erläutert würde,
ich bin schonmal dankbar im voraus :applaus:
Java:
if (e.getSource()==speichern){
Außerdem wäre es nett, wenn der Unterschied zwischen Image, ImageIcon, Buffered image etc. kurz erläutert würde,
ich bin schonmal dankbar im voraus :applaus:
Java:
import javax.swing.*;
import java.awt.*;
import javax.swing.filechooser.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.ImageIO;
public class BildProgramm implements ActionListener,FocusListener{
JFrame jframe;
JLabel jlabel;
JPanel jpanel;
Button button;
Button speichern;
BufferedImage image;
int x;
int y;
boolean zeichnen=false;
ImageIcon imageicon;
JTextField jtextfield1;
JTextField jtextfield2;
//JTextField jtextfield3;
public void actionPerformed (ActionEvent e){
if (e.getSource()==button){
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & PNG Images", "jpg", "png");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(jpanel);
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("Diese Datei wird geöffnet: " +
chooser.getSelectedFile().getName());
System.out.println(chooser.getSelectedFile().getName());
try{
x=Integer.parseInt( jtextfield1.getText());
y=Integer.parseInt( jtextfield2.getText());
image = ImageIO.read(chooser.getSelectedFile());
imageicon.setImage(image.getScaledInstance(x,y,Image.SCALE_FAST));
jlabel.setIcon(imageicon);
jpanel.add(jlabel);
jframe.validate();
}
catch(IOException ex){
ex.printStackTrace();
System.out.println("Fehler aufgetreten");
}
}
}
if (e.getSource()==speichern){
try{
JFileChooser chooser2 = new JFileChooser();
int returner=chooser2.showDialog(jpanel,"wo speichern");
if(returner==JFileChooser.APPROVE_OPTION){
chooser2.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
String path = chooser2.getSelectedFile().getPath();
System.out.println(path);
path = path + ".jpg" ;
System.out.println(path);
Image richtigesimage = image.getScaledInstance(x,y,Image.SCALE_SMOOTH);
BufferedImage bimage= new BufferedImage(x,y,BufferedImage.TYPE_INT_RGB);
Graphics g=bimage.getGraphics();
g.drawImage(richtigesimage,x,y,null);
g.dispose();
jpanel.paint(g);
ImageIO.write(bimage,"jpg", new File(path));
}
}
catch(IOException exc){
System.out.println("Fehler");
exc.printStackTrace();
}
}
}
public void focusGained(FocusEvent e){
if (e.getSource()==jtextfield1)
jtextfield1.setText("");
if (e.getSource()==jtextfield2)
jtextfield2.setText("");
// if (e.getSource()==jtextfield3)
// jtextfield3.setText("");
}
public void focusLost(FocusEvent e){
if (e.getSource()==jtextfield1 && jtextfield1.getText()=="")
jtextfield1.setText("Breite eingeben");
if (e.getSource()==jtextfield1 && jtextfield1.getText()=="")
jtextfield2.setText("Höhe eingeben");
// if (e.getSource()==jtextfield3 && jtextfield3.getText()=="")
//jtextfield3.setText("Dateinamen eingeben");
}
public void los(){
jframe = new JFrame();
jpanel = new JPanel();
button = new Button("Bild auswählen");
imageicon = new ImageIcon();
jlabel = new JLabel();
speichern= new Button("wo speichern");
jtextfield1 = new JTextField("Breite eingeben");
jtextfield2 = new JTextField("Höhe eingeben");
//jtextfield3 = new JTextField("Dateinamen eingeben");
jtextfield1.addFocusListener(this);
jtextfield2.addFocusListener(this);
// jtextfield3.addFocusListener(this);
button.addActionListener(this);
speichern.addActionListener(this);
jpanel.add(button);
jpanel.add(speichern);
jframe.setSize(500,500);
jframe.add(jpanel);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jpanel.add(jtextfield1);
jpanel.add(jtextfield2);
//jpanel.add(jtextfield3);
jframe.setVisible(true);
}
public static void main (String[]args){
BildProgramm bildprogramm = new BildProgramm();
bildprogramm.los();
}
}