ImageIo ignoriert Transparenz in PNGs

guitargod

Mitglied
Hallo,

Vorweg: ich arbeite in einem großen Framework und es ist noch Java 6 in Verwendung.

Folgendes Problem plagt mich:
Ich versuche BufferedImages in ein Bytearray zu schreiben.

Haut auch hin, aber die Funktion ImageIO.write() ignoriert bei PNGs einfach vehement die Transparenz-Settings des Bildes.

Bei späteren Widereinlesen der Bilder ist die Transparenz aus dem Bild verschwunden.

Ich habe leider keinen Einfluss auf Imagetype der BufferedImages (RGB, ARGB...) da sie aber interessanterweise vorher Transparenz-Werte besitzen (image.getAlphaRaster() ist nicht null und gibt auch für ausgewähle Pixel korrekte Transparenz-Werte zurück), und erst nach dem Schreiben und Widereinlesen keine Transparenz mehr haben, dürfte es wohl am Schreiben liegen (das Einlesen von Transparenten Bildern wurde mehrfach getestet und funktioniert so weit...).

Ich könnte mir trotzdem vorstellen, dass es vielleicht am falschen Type liegt - kann man den evtl. auch für ein bestehendes BufferedImage verändern? Oder müsste ich den Umweg gehen und ein neues Objekt erstellen?

Bin etwas ratlos mit der Thematik, weil auch intensives googeln keine großen Erkenntnisse brachte (außer das manchmal Leute beim einlesen ähnliche Probleme hatten...).

Hat jemand einen Tipp für mich, wie ich mit dem Problem umgehen kann?

Danke im Voraus!

Relevante Codestellen:

Hier scheint das Problem zu liegen:
Java:
public static byte[] bufferedImageToByteArray(BufferedImage originalImage, String formatName) throws IOException {
		ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
		ImageIO.write( originalImage, formatName, byteOutputStream);
		byteOutputStream.flush();
		byte[] imageInByte = byteOutputStream.toByteArray();
		byteOutputStream.close();
		
		return imageInByte;
		
}

Einlesen läuft so ab:
Java:
				image = ImageIO.read(iconFile);
 

kaoZ

Top Contributor
Arbeitest du mit Graphics ? oder Graphics2D ? oder wo und wie verwendest du die Images ?

Oder werden tatsächlich die Alpha werte 'genullt' ?

Ich könnte mir trotzdem vorstellen, dass es vielleicht am falschen Type liegt - kann man den evtl. auch für ein bestehendes BufferedImage verändern?

schonmal versucht ein SubImage daraus zu erstellen und vorher den Type zu definieren, oder werden die Werte dann einfach überschreiben ?

aber das Problem scheint ja auch so wie es aussieht eher hier zu liegen :

Haut auch hin, aber die Funktion ImageIO.write() ignoriert bei PNGs einfach vehement die Transparenz-Settings des Bildes.
 
Zuletzt bearbeitet:

guitargod

Mitglied
Hallo,
tja, leider bin ich immer noch nicht schlauer, aber ich bin nun dabei, mal Buffered Images mit verschiedenen Typen zu verwenden. Vielleicht lässt sich damit ja ein Ergebnis erreichen.

Hat jemand eine Ahnung, wie man BufferedImages alternativ in Bytearrays schreiben könnte (ohne ImageIO) zu verwenden?
 

guitargod

Mitglied
Arbeitest du mit Graphics ? oder Graphics2D ? oder wo und wie verwendest du die Images ?

Oder werden tatsächlich die Alpha werte 'genullt' ?
:

Achso, und ich greife Graphics/Graphics2D nicht an. Die Images werden vom File eingelesen und als ByteArray gespeichert. Aus den gespeicherten Daten werden dann zu bestimmen Zeitpunkten wieder Files erzeugt...

Wie gesagt - meiner Vermutung nach gehen beim Schreiben in Bytearrays alle Alphawerte verloren...
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T ImageIO.read -> Can`t read input file Allgemeine Java-Themen 11
T JFreeChart Diagramm speichern - Problem mit ImageIO nach Projektexport Allgemeine Java-Themen 3
E ImageIo mit png und alpha Allgemeine Java-Themen 4
F ImageIO cant create InputStream Allgemeine Java-Themen 9
bj99 ImageIO.write() macht Probleme Allgemeine Java-Themen 7
G Problem im ImageIO und JAR Allgemeine Java-Themen 2
A Probleme mit ImageIO.read( . ) Allgemeine Java-Themen 12
S NoClassDefFoundException - ImageIO.read - Applet Allgemeine Java-Themen 3
W Ausgabequalität von ImageIO Allgemeine Java-Themen 5
S Problem mit ImageIO Allgemeine Java-Themen 10
C ImageIO die read-Methode liefert mir ein null- Wert zurück Allgemeine Java-Themen 10
mrbig2017 Sleep wird ignoriert und der Thread wartet nicht Allgemeine Java-Themen 1
D Input/Output Zeilen werden "ignoriert" beim Einlesen aus einer Textdatei Allgemeine Java-Themen 3
U Title Information in JSP wird ignoriert Allgemeine Java-Themen 7
R JTextPane (JEditorPane) ignoriert JScrollPane Allgemeine Java-Themen 5
I Filewriter ignoriert Zeilenumbrüche Allgemeine Java-Themen 4
G Variable wird ignoriert - warum ? Allgemeine Java-Themen 36
M transparenz bei png bildern beibehalten Allgemeine Java-Themen 11
D Transparenz bei Vektorgrafiken? Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben