TMI-146: Now correctly sets ExtraSamples only when there are more components in the raster than color components in the color space.

This commit is contained in:
Harald Kuhr 2015-06-17 13:24:45 +02:00
parent 51ca99d433
commit 7e65164b87

View File

@ -145,9 +145,9 @@ public final class TIFFImageWriter extends ImageWriterBase {
entries.add(new TIFFEntry(TIFF.TAG_IMAGE_HEIGHT, renderedImage.getHeight())); entries.add(new TIFFEntry(TIFF.TAG_IMAGE_HEIGHT, renderedImage.getHeight()));
// entries.add(new TIFFEntry(TIFF.TAG_ORIENTATION, 1)); // (optional) // entries.add(new TIFFEntry(TIFF.TAG_ORIENTATION, 1)); // (optional)
entries.add(new TIFFEntry(TIFF.TAG_BITS_PER_SAMPLE, asShortArray(sampleModel.getSampleSize()))); entries.add(new TIFFEntry(TIFF.TAG_BITS_PER_SAMPLE, asShortArray(sampleModel.getSampleSize())));
// If numComponents > 3, write ExtraSamples // If numComponents > numColorComponents, write ExtraSamples
if (numComponents > 3) { if (numComponents > colorModel.getNumColorComponents()) {
// TODO: Write per component > 3 // TODO: Write per component > numColorComponents
if (colorModel.hasAlpha()) { if (colorModel.hasAlpha()) {
entries.add(new TIFFEntry(TIFF.TAG_EXTRA_SAMPLES, colorModel.isAlphaPremultiplied() ? TIFFBaseline.EXTRASAMPLE_ASSOCIATED_ALPHA : TIFFBaseline.EXTRASAMPLE_UNASSOCIATED_ALPHA)); entries.add(new TIFFEntry(TIFF.TAG_EXTRA_SAMPLES, colorModel.isAlphaPremultiplied() ? TIFFBaseline.EXTRASAMPLE_ASSOCIATED_ALPHA : TIFFBaseline.EXTRASAMPLE_UNASSOCIATED_ALPHA));
} }
@ -169,6 +169,7 @@ public final class TIFFImageWriter extends ImageWriterBase {
default: default:
} }
// TODO: We might want to support CMYK in JPEG as well...
int photometric = compression == TIFFExtension.COMPRESSION_JPEG ? int photometric = compression == TIFFExtension.COMPRESSION_JPEG ?
TIFFExtension.PHOTOMETRIC_YCBCR : TIFFExtension.PHOTOMETRIC_YCBCR :
getPhotometricInterpretation(colorModel); getPhotometricInterpretation(colorModel);
@ -684,7 +685,7 @@ public final class TIFFImageWriter extends ImageWriterBase {
// BufferedImage image = new BufferedImage(original.getWidth(), original.getHeight(), BufferedImage.TYPE_INT_BGR); // BufferedImage image = new BufferedImage(original.getWidth(), original.getHeight(), BufferedImage.TYPE_INT_BGR);
// BufferedImage image = new BufferedImage(original.getWidth(), original.getHeight(), BufferedImage.TYPE_3BYTE_BGR); // BufferedImage image = new BufferedImage(original.getWidth(), original.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
BufferedImage image; BufferedImage image;
if (type < 0 || type == original.getType()) { if (type <= 0 || type == original.getType()) {
image = original; image = original;
} }
else if (type == BufferedImage.TYPE_BYTE_INDEXED) { else if (type == BufferedImage.TYPE_BYTE_INDEXED) {