# Image Object speichern oder in ein BufferedImage umwandeln



## Guest (19. Nov 2006)

Hallo

Ich habe 1 bzw 2 Problem mit einem Code aus dem Buche Java ist auch eine Insel:

1. 

Ich habe ein Problem mit dem Speichern von Images in JPG oder sonstigen Formaten.
Man kann meines Wissens nur BufferedImage in JPG etc speichern. Was ist aber wenn ich nur ein ImageObjekt habe (zwangsläufig)?

Kann ich es in ein BufferedImage umwandeln (erscheint mir komisch, daja BufferedImage eine Unterklasse ist) oder kann man doch ImageObjekte abspeichern.

2.

FilteredImageSource(getSource, filter); geht bei mir nicht wird als Fehler angezeigt. Was soll eigentlich dieses getSource? new FilteredImageSource() veralngt ja ein ImageProducer und ein Filter.



```
java.awt.Image scaled0 = new ImageIcon("test"+i+".jpg").getImage();
java.awt.Image scaled1 =   scaled0.getScaledInstance(
(scaled0.getWidth(null) * percent) / 100,
(scaled0.getHeight(null) * percent) / 100,
java.awt.Image.SCALE_SMOOTH );
		
java.awt.Image scaled2 = scaled1.getScaledInstance(
Toolkit.getDefaultToolkit().getScreenSize().width,
Toolkit.getDefaultToolkit().getScreenSize().height,
java.awt.Image.SCALE_SMOOTH);  

public java.awt.Image getScaledInstance(int width, int height, int hints,Image tempimage)
{
ImageFilter filter;
if ((hints & (SCALE_SMOOTH | SCALE_AREA_AVERAGING)) != 0)
 filter = new AreaAveragingScaleFilter(width, height);

else
filter = new ReplicateScaleFilter(width, height);
		 
ImageProducer prod;
prod =  new FilteredImageSource([color=red]getSource[/color], filter);
return (java.awt.Image) Toolkit.getDefaultToolkit().createImage(prod);
}
```

Und dann möchte das skalierte Bild wieder speichern.

PS: ich muss java.awt.Image schreiben, weil ich nacher das Bild in einem PDF speichere mit Hilfe von iText (Itext hat ein selbst geschriebenes ImageObject)

mfg

mischt


----------



## mischt (19. Nov 2006)

Falls ihr auch eine andere Idee habt ich bin für alles offen....

Meine Idee war:

- Screenshots von Webseiten machen (fuktioniert)
- Bilder in PDF speichern (funktioniert)

Nur die Bilder sind von dem Scrrenshot her zu gross für das PDF und somit muss ich sie skallieren oder bzw einfach so komprimieren damit sie in das A4 Format des PDF passen.

mfg

Mischt


----------



## André Uhres (19. Nov 2006)

```
package paint;
/*
 * ScaleTest.java
 */
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.net.*;
import javax.imageio.*;
import javax.swing.*;
public class ScaleTest extends JFrame {
    private JPanel mainpanel;
    private Image scaled1;
    private URL url;
    public ScaleTest() {
        setSize(new Dimension(300,200));
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        mainpanel = new JPanel(new GridBagLayout());
        add(mainpanel, BorderLayout.CENTER);
        try{
            url = new URL("http://images.thetimes.co.uk/TGD/picture/0,,223788,00.jpg");
        }catch(MalformedURLException ex){
            ex.printStackTrace();
        }
        Image scaled0 = new ImageIcon(url).getImage();
        int w = (int)(scaled0.getWidth(null)*0.6);
        scaled1 = scaled0.getScaledInstance(w, -1, Image.SCALE_SMOOTH );
        mainpanel.add(new JLabel(new ImageIcon(scaled1)));
        JButton bt = new JButton("Save scaled picture");
        this.add(bt, BorderLayout.NORTH);
        bt.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                save();
            }
        });
        this.setVisible(true);
    }
    private void save(){
//BufferedImage erzeugen:
        int w = scaled1.getWidth(null);
        int h = scaled1.getHeight(null);
        BufferedImage bufferedImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
//Image drauf malen:
        Graphics2D g2d2 = bufferedImage.createGraphics();
        g2d2.drawImage(scaled1, 0, 0, this);
        try {
            ImageIO.write(bufferedImage, "jpg", new File("c:\\bufferedImage.jpg"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    public static void main(String[] args) {new ScaleTest();}
}
```


----------

