From 54860dff1b9be38229abbf68bc21b365dca48700 Mon Sep 17 00:00:00 2001 From: CGDogan <126820728+CGDogan@users.noreply.github.com> Date: Wed, 26 Jul 2023 15:53:39 +0100 Subject: [PATCH 1/4] TiffSaver handle RGBA --- components/formats-bsd/src/loci/formats/tiff/TiffSaver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java b/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java index 36566e3c046..af3dc28cac6 100644 --- a/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java +++ b/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java @@ -988,7 +988,7 @@ private void makeValidIFD(IFD ifd, int pixelType, int nChannels) { if (nChannels == 1 && ifd.getIFDValue(IFD.COLOR_MAP) != null) { pi = PhotoInterp.RGB_PALETTE; } - else if (nChannels == 3) { + else if (nChannels == 3 || nChannels == 4) { pi = PhotoInterp.RGB; } ifd.putIFDValue(IFD.PHOTOMETRIC_INTERPRETATION, pi.getCode()); From 32b6e5fbe8c01b3f26d6585dfca730baf7c65d78 Mon Sep 17 00:00:00 2001 From: CGDogan <126820728+CGDogan@users.noreply.github.com> Date: Wed, 22 Nov 2023 17:53:52 +0000 Subject: [PATCH 2/4] Update TiffSaver.java --- .../formats-bsd/src/loci/formats/tiff/TiffSaver.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java b/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java index 3e59808b8fe..13822137c68 100644 --- a/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java +++ b/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java @@ -1022,12 +1022,21 @@ private void makeValidIFD(IFD ifd, int pixelType, int nChannels) { pi = PhotoInterp.RGB_PALETTE; } else if (nChannels == 3 || nChannels == 4) { + // TODO: handle CMYK; nChannels == 4, extraSamples 0 (can be omitted) if (ifd.getIFDValue(IFD.COMPRESSION).equals(TiffCompression.JPEG.getCode())) { // see https://github.com/ome/bioformats/issues/3856 pi = PhotoInterp.Y_CB_CR; + if (nChannels == 4) { + int[] extraSamplesArray = {2}; + ifd.putIFDValue(IFD.EXTRA_SAMPLES, extraSamplesArray); + } } else { pi = PhotoInterp.RGB; + if (nChannels == 4) { + int[] extraSamplesArray = {1}; + ifd.putIFDValue(IFD.EXTRA_SAMPLES, extraSamplesArray); + } } } ifd.putIFDValue(IFD.PHOTOMETRIC_INTERPRETATION, pi.getCode()); From 4be5dd6fb8c1a452d4e98a9895ee1a3d4f0d83b4 Mon Sep 17 00:00:00 2001 From: CGDogan <126820728+CGDogan@users.noreply.github.com> Date: Wed, 22 Nov 2023 18:34:21 +0000 Subject: [PATCH 3/4] Update TiffSaver.java --- .../src/loci/formats/tiff/TiffSaver.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java b/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java index 13822137c68..091c2b99373 100644 --- a/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java +++ b/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java @@ -1022,21 +1022,17 @@ private void makeValidIFD(IFD ifd, int pixelType, int nChannels) { pi = PhotoInterp.RGB_PALETTE; } else if (nChannels == 3 || nChannels == 4) { - // TODO: handle CMYK; nChannels == 4, extraSamples 0 (can be omitted) + // TODO: handle CMYK; nChannels == 4, extraSamples should be omitted if (ifd.getIFDValue(IFD.COMPRESSION).equals(TiffCompression.JPEG.getCode())) { // see https://github.com/ome/bioformats/issues/3856 pi = PhotoInterp.Y_CB_CR; - if (nChannels == 4) { - int[] extraSamplesArray = {2}; - ifd.putIFDValue(IFD.EXTRA_SAMPLES, extraSamplesArray); - } } else { pi = PhotoInterp.RGB; - if (nChannels == 4) { - int[] extraSamplesArray = {1}; - ifd.putIFDValue(IFD.EXTRA_SAMPLES, extraSamplesArray); - } + } + if (nChannels == 4) { + int[] extraSamplesArray = {0}; + ifd.putIFDValue(IFD.EXTRA_SAMPLES, extraSamplesArray); } } ifd.putIFDValue(IFD.PHOTOMETRIC_INTERPRETATION, pi.getCode()); From 1ad16dddb0d879f9ae8be37df3c49d0cf7820de4 Mon Sep 17 00:00:00 2001 From: CGDogan <126820728+CGDogan@users.noreply.github.com> Date: Wed, 22 Nov 2023 18:35:38 +0000 Subject: [PATCH 4/4] Update TiffSaver.java --- components/formats-bsd/src/loci/formats/tiff/TiffSaver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java b/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java index 091c2b99373..8a683cc1d44 100644 --- a/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java +++ b/components/formats-bsd/src/loci/formats/tiff/TiffSaver.java @@ -1022,7 +1022,7 @@ private void makeValidIFD(IFD ifd, int pixelType, int nChannels) { pi = PhotoInterp.RGB_PALETTE; } else if (nChannels == 3 || nChannels == 4) { - // TODO: handle CMYK; nChannels == 4, extraSamples should be omitted + // TODO: handle CMYK; nChannels == 4, EXTRA_SAMPLES must not be present if (ifd.getIFDValue(IFD.COMPRESSION).equals(TiffCompression.JPEG.getCode())) { // see https://github.com/ome/bioformats/issues/3856 pi = PhotoInterp.Y_CB_CR;