ImageIO ist eine tolle Klasse, aber wie kommt sie dazu, BufferedImages zu produzieren, die zu sich selbst nicht kompatibel sind?!?
Ich lese zuerst mit ImageIO ein png ein, was auch funktioniert. Dann will ich ein Bild erstellen mit denselben Eigenschaften, insbesondere mit demselben Typ. Aber das eingelesene BufferedImage hat den Typ TYPE_CUSTOM. Der Versuch, ein zweites BufferedImage dieses Typs zu erstellen, schlägt fehl. KSKB:
Bei .gifs und .jpgs funktioniert es problemlos, aber nicht bei pngs. Scheinbar muss ich für jedes Bild, das ich einlese und ein gleichwertiges Image erstellen will, zuerst prüfen ob der Type==0 ist und ggf. den Type Transparency.TRANSLUCENT verwenden, der auch BufferedImage.TYPE_INT_ARGB_PRE entspricht.
Gibts einen bestimmten Grund, wieso png so widerspenstig sind?
Ich lese zuerst mit ImageIO ein png ein, was auch funktioniert. Dann will ich ein Bild erstellen mit denselben Eigenschaften, insbesondere mit demselben Typ. Aber das eingelesene BufferedImage hat den Typ TYPE_CUSTOM. Der Versuch, ein zweites BufferedImage dieses Typs zu erstellen, schlägt fehl. KSKB:
Java:
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
public class IncompatibleBufferedImage {
public static void main(String[] args) {
try {
URL url = new URL("http://upload.wikimedia.org/wikipedia/"+
"commons/4/47/PNG_transparency_demonstration_1.png");
BufferedImage image1 = ImageIO.read(url);
BufferedImage image2 = new BufferedImage(100,100,image1.getType());
System.out.println(image2.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
Code:
Exception in thread "main" java.lang.IllegalArgumentException: Unknown image type 0
at java.awt.image.BufferedImage.<init>(BufferedImage.java:490)
at ch.lantersoft.klopfer.IncompatibleBufferedImage.main(IncompatibleBufferedImage.java:14)
Bei .gifs und .jpgs funktioniert es problemlos, aber nicht bei pngs. Scheinbar muss ich für jedes Bild, das ich einlese und ein gleichwertiges Image erstellen will, zuerst prüfen ob der Type==0 ist und ggf. den Type Transparency.TRANSLUCENT verwenden, der auch BufferedImage.TYPE_INT_ARGB_PRE entspricht.
Gibts einen bestimmten Grund, wieso png so widerspenstig sind?