Image Objekt speichern . . .



  • Hallo !

    Ich versuche ein Programm zu schreiben, das mir in meinem Urlaubsbildornder (der schon recht umfangreich ist) automatisch ALLE Bilder, die dort enthalten sind, sucht, um kleine Vorschaubilder zu erzeugen.

    Ich habe im Internet folgenden Code gefunden, der aus einem .jpg Bild ein Vorschaubild erzeugt:

    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    
    public class Main 
    {
    
    	public static void main(String[] args) 
    	{
    		try 
    		{
    			BufferedImage img = ImageIO.read(new File("c:/test.jpg")); // Hier wird ja das Original Bild geladen
    			Image smallImg = img.getScaledInstance(160,120,Image.SCALE_FAST); // Hier wird ein kleineres Bild erzeugt                                                      
    			//...  Hier müsste ich smallImg irgendwie speichern . . . aber wie ?!?
    		} 
    		catch (IOException e) 
    		{
    			e.printStackTrace();
    		}
    	}
    }
    

    Jetzt weiß ich aber überhaupt nicht, wie ich "smallImg" wieder abspeichern kann.

    Ich surfe schon seit zwei Stunden durch die Klassenreferenz von Sun, aber irgendwie blicke ich da gar nicht durch.
    Ich meine es MUSS doch eine Methode geben, mit der ich so ein Image-Objekt speichern kann.
    Aber selbst im Toolkit finde ich nur die Methode getImage(), mit der ich ein Bild laden kann.

    Muss vielleicht noch dazu sagen, dass ich mit Java erst beginne. Aber im Studium programmieren wir auch gerade Java. Deshalb würde ich das Programm ganz gerne in dieser Sprache umsetzen.

    Hoffentlich könnt ihr mir helfen.

    Gruß
    Maik



  • LOL, du liest ein Bild mit ImageIO.read() aber kommst nicht auf die Idee, es mit ImageIO.write() zu speichern??



  • Also, was ich jetzt dazu sagen soll, dass weiß ich auch nicht . . .

    Ich will ja nicht das "BufferedImage"-Objekt abspeichern, sonder das "Image"-Objekt !!

    Und für Image gibt es leider keine write Methode . . .

    So weit ich weiß heißt LOL LaughOutLoud . . . , wie gesagt, was ich davon halten soll . . . 😕 . . .



  • Ok, es ist gar nicht so leicht, ich geb's zu. Das Image-API von Java ist ziemlich abstrakt. Das 'Image', was du mit getScaledInstance() holst, ist praktisch nur die Information, dass es sich hierbei um ein gescaltes image handelt, nicht mehr. Es ist nicht das Bild selber.
    Du musst ein neues BufferedImage anlegen, davon den Graphics holen und dann dein 'Image' (was wie gesagt nur die Information ist, dass es ein gescaltes Abbild von dem andern ist) da reinrendern. Dieses BufferedImage kannst du glaub ich abspeichern. Ich bin jetzt zu faul, nachzusehen. Kann auch sein, dass du ein RenderedImage erzeugen musst.

    Wichtig ist, dass du das Konzept verstehst. Ein BufferedImage ist ein Bild. Ein Image ist erstmal nur die Information über ein Bild (wobei zu beachten ist, dass das für ein BufferedImage auch gilt. Ein BufferedImage ist schließlich auch ein Bild, über das Informationen vorliegen).
    Ein Graphics ist sowas wie ein Grafikkontext. Wenn du dir von nem Image ein Graphics holst, kannst du auf diesem Kontext malen -> oder eben Transformationen wie scale anwenden.
    Ein AffineTransform ist das abstrakte Konzept einer Transformation. Es ist etwa entsprechend zu einer Transformationsmatrix.
    Ein AffineTransformOp ist eine konkrete Transformationsoperation, bei der man dann auch Sachen wie Filter festlegen kann.

    Ich möchte jetzt das nicht selber coden, nur damit du ne Lösung hast. Es schadet sicher nicht, wenn du das erstmal tiefer einsteigen musst. Aber da es nicht ganz so leicht ist, war das vorher vielleicht nicht sehr nett von mir. Ich bin halt einfach kein netter Mensch. 😃 👍



  • Aha, da fällt mir doch was zu ein:

    Danke für diese ausführliche Antwort !!!! 👍

    Das da jetzt kein Code dabei ist, ist gar nicht so schlimm. Wenn man erst einmal weiß, wo ich ansetzen muss, dann kann ich ja erst mal selber versuchen.

    Falls ich noch fragen habe, weiß ich ja, an wen ich mich wenden kann. . .

    Gruß
    Maik


Anmelden zum Antworten