Hallo alle zusammen, ich wälze gerade folgendes Problemchen:
ich habe ein Image, das ich verkleinere durch ein resampling. Das Image wird aus einem tiff eingelesen, weiterverarbeitet und wieder als tiff abgespeichert. Allerdings ist es jetzt viel größer als vorher. Das Quell-tiff hatte eine Auflösung von 300x300 dpi und 8Bit Farbtiefe. Nach dem Speichern hat es irgendeine höhere Auflösung (IrfanView zeigt keine Auflösung für das Bild an) und eine Farbtiefe von 24Bit.
Mir ist nicht ganz klar, bei welchem Schritt die Parameter eingestellt werden. Von der Logik her müsste das schon beim resampling (Graphics2D.drawImage) passieren. Da habe ich allerdings nichts gefunden.
Eine weitere Möglichkeit ist beim Schreiben der Datei mit den TIFFImageWriteParam., aber auch da habe ich irgendwie nichts passendes gefunden.
So schaut mein Code aus (Ausschnitte):
resampling:
speichern:
Kann mir jemand einen Tipp geben, wo ich die ursprüngliche Auflösung und Farbtiefe einstellen kann?
Danke
Albrecht
ich habe ein Image, das ich verkleinere durch ein resampling. Das Image wird aus einem tiff eingelesen, weiterverarbeitet und wieder als tiff abgespeichert. Allerdings ist es jetzt viel größer als vorher. Das Quell-tiff hatte eine Auflösung von 300x300 dpi und 8Bit Farbtiefe. Nach dem Speichern hat es irgendeine höhere Auflösung (IrfanView zeigt keine Auflösung für das Bild an) und eine Farbtiefe von 24Bit.
Mir ist nicht ganz klar, bei welchem Schritt die Parameter eingestellt werden. Von der Logik her müsste das schon beim resampling (Graphics2D.drawImage) passieren. Da habe ich allerdings nichts gefunden.
Eine weitere Möglichkeit ist beim Schreiben der Datei mit den TIFFImageWriteParam., aber auch da habe ich irgendwie nichts passendes gefunden.
So schaut mein Code aus (Ausschnitte):
resampling:
Code:
// Draw the scaled image
BufferedImage objDownsample = new BufferedImage(iTargetWidth,iTargetHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = objDownsample.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image, 0, 0, iTargetWidth, iTargetHeight, null);
return objDownsample;
Code:
// setup writer
ios = ImageIO.createImageOutputStream(tiffFile);
writer.setOutput(ios);
TIFFImageWriteParam writeParam = new TIFFImageWriteParam(Locale.GERMAN);
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
writeParam.setCompressionType("PackBits");
// convert to an IIOImage
IIOImage iioImage = new IIOImage(image, null, null);
// write it!
writer.write(null, iioImage, writeParam);
Danke
Albrecht