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?
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);