ImageIo mit png und alpha

Empire Phoenix

Top Contributor
Hi, ich habe mir ein kleines programm gebastelt um mir LOD's für png bilder zu erstellen.
Das funktioniert soweit und optisch(aus menschlicher Sicht) ist das ergebnis auch richtig. Leider scheint jedoch ImageIO bilder zu optimieren, so das zb in transparenten bereichen keine Farbwerte gespeichert werden und in schwarzen bereichen keine Alphawerte. Dummerweise brauche ich jedoch diese genau so wie sie vorher waren, da dieses lediglich als Storage für 4 dimensionale werte benutzt wird (Terrainsplatting wens interessiert). Gibt es einen weg wie ich ImageIo dazu bringen kann das bild nur zu resizen ohne sonst etwas daran zu ändern?

Java:
  BufferedImage original = ImageIO.read(this.file);
		    int owidth = original.getWidth();
		    int oheight = original.getHeight();
		    
		    BufferedImage scaledImage = new BufferedImage(owidth, oheight, BufferedImage.TYPE_4BYTE_ABGR);
		    Graphics2D graphics2D = scaledImage.createGraphics();
		    graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
		    	RenderingHints.VALUE_INTERPOLATION_BICUBIC);
		    graphics2D.drawImage(original, 0, 0, owidth/2, oheight/2, null);
		    graphics2D.dispose();
		    
		    String out = outdir + "/" + name+"_lod"+this.lod + ".png";
		    out = out.toLowerCase();
		    File outfile = new File(out);
		    ImageIO.write(scaledImage, "png",outfile);
 

Marco13

Top Contributor
Ja, bei INT_ARGB hat man auch nur 32 (d.h. 4x8) bits, d.h. eigentlich ist das FAST das gleiche wie "4BYTE_ABGR". Aber die interne Umsetzung ist ganz anders, und ... ImageIO ist eben Hexenwerk: Man gibt ihm ein Bild, und er schreibt es einfach raus :shock: (im Ernst: Was da unter der Haupe alles passiert, ist schon verdammt kompliziert). Deswegen war der Tipp jetzt erstmal nur "geraten": INR_RGB und INT_ARGB sind so die "Standardformate", die man meistens verwenden sollte, aber es kann genausogut sein, dass das hier keinen Unterschied macht. Wenn's nicht auf Anhieb klappt, sag' einfach nochmal bescheid.
 
J

JavaProg007

Gast
Ich hatte gerade auch das gleiche Problem, die Methode

Java:
Toolkit.getDefaultToolkit().getImage()

tut es korrekt. Da kommt jedoch kein
Java:
BufferedImage
, sondern nur ein [Java]Image[/code] zurück. Dies muss noch konvertiert werden.
 

Ähnliche Java Themen

Neue Themen


Oben