Hallo!
Ich habe im Internet folgendes Programm gefunden, das mit einem Bild genau das macht, was ich mir vorgestellt habe, nämlich ein Vorschaubild erstellen:
Jetzt würde ich ganz gerne die Funktionalität dieses Programms in einzelne Klassen packen, so dass ich alles vernünftig für ein eigenes Projekt benutzen kann.
Wie soll man da am Besten vorgehen?
Alles, was jetzt auskommentiert ist Abschnittsweise in eine Klasse packen, oder bietet sich ein anderes Prinzip an?
Wäre auch ganz nett, wenn ihr mir mal ein kleines Beispiel geben könntet, wie man ein Javaprogramm, was diese Funktionalität hat am "saubersten" programmiert, denn ich denke so wie es dort steht haben es sich die Jave-Entwickler nicht vorgestellt, oder ?
Leider ist dies aber genau der Stil, den wahrscheinlich auch ich benutzen würde. Aber wenn ich schon mit Java programmiere, dann möchte ich es auch mal "richtig" lernen.
Danke schon mal!
Gruß
Maik
Ich habe im Internet folgendes Programm gefunden, das mit einem Bild genau das macht, was ich mir vorgestellt habe, nämlich ein Vorschaubild erstellen:
Code:
/*
* Thumbnail.java (requires Java 1.2+)
*/
import com.sun.image.codec.jpeg.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
public class Thumbnail
{
public static void main(String[] args) throws Exception
{
if (args.length != 5)
{
System.err.println("Usage: java Thumbnail INFILE " +
"OUTFILE WIDTH HEIGHT QUALITY");
System.exit(1);
}
// load image from INFILE
Image image = Toolkit.getDefaultToolkit().getImage(args[0]);
MediaTracker mediaTracker = new MediaTracker(new Container());
mediaTracker.addImage(image, 0);
mediaTracker.waitForID(0);
// determine thumbnail size from WIDTH and HEIGHT
int thumbWidth = Integer.parseInt(args[2]);
int thumbHeight = Integer.parseInt(args[3]);
double thumbRatio = (double)thumbWidth / (double)thumbHeight;
int imageWidth = image.getWidth(null);
int imageHeight = image.getHeight(null);
double imageRatio = (double)imageWidth / (double)imageHeight;
if (thumbRatio < imageRatio)
{
thumbHeight = (int)(thumbWidth / imageRatio);
}
else
{
thumbWidth = (int)(thumbHeight * imageRatio);
}
// draw original image to thumbnail image object and
// scale it to the new size on-the-fly
BufferedImage thumbImage = new BufferedImage(thumbWidth,
thumbHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
// save thumbnail image to OUTFILE
BufferedOutputStream out = new BufferedOutputStream(new
FileOutputStream(args[1]));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.
getDefaultJPEGEncodeParam(thumbImage);
int quality = Integer.parseInt(args[4]);
quality = Math.max(0, Math.min(quality, 100));
param.setQuality((float)quality / 100.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);
out.close();
System.out.println("Done.");
System.exit(0);
}
}
Jetzt würde ich ganz gerne die Funktionalität dieses Programms in einzelne Klassen packen, so dass ich alles vernünftig für ein eigenes Projekt benutzen kann.
Wie soll man da am Besten vorgehen?
Alles, was jetzt auskommentiert ist Abschnittsweise in eine Klasse packen, oder bietet sich ein anderes Prinzip an?
Wäre auch ganz nett, wenn ihr mir mal ein kleines Beispiel geben könntet, wie man ein Javaprogramm, was diese Funktionalität hat am "saubersten" programmiert, denn ich denke so wie es dort steht haben es sich die Jave-Entwickler nicht vorgestellt, oder ?
Leider ist dies aber genau der Stil, den wahrscheinlich auch ich benutzen würde. Aber wenn ich schon mit Java programmiere, dann möchte ich es auch mal "richtig" lernen.
Danke schon mal!
Gruß
Maik