diff Framework/Inputs/HierarchicalTiff.cpp @ 296:559499b80da8

refactoring
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 18 Jul 2023 06:45:44 +0200
parents 20a730889ae2
children c1687b8fc800
line wrap: on
line diff
--- a/Framework/Inputs/HierarchicalTiff.cpp	Thu Jul 13 18:18:21 2023 +0200
+++ b/Framework/Inputs/HierarchicalTiff.cpp	Tue Jul 18 06:45:44 2023 +0200
@@ -99,10 +99,13 @@
   }
 
 
-  bool HierarchicalTiff::GetCurrentCompression(ImageCompression& compression)
+  bool HierarchicalTiff::GetCurrentDirectoryInformation(TIFF* tiff,
+                                                        ImageCompression& compression,
+                                                        Orthanc::PixelFormat& pixelFormat,
+                                                        Orthanc::PhotometricInterpretation& photometric)
   {
     uint16_t c;
-    if (!TIFFGetField(tiff_, TIFFTAG_COMPRESSION, &c))
+    if (!TIFFGetField(tiff, TIFFTAG_COMPRESSION, &c))
     {
       return false;
     }
@@ -111,30 +114,24 @@
     {
       case COMPRESSION_NONE:
         compression = ImageCompression_None;
-        return true;
+        break;
 
       case COMPRESSION_JPEG:
         compression = ImageCompression_Jpeg;
-        return true;
+        break;
 
       default:
         return false;
     }
-  }
 
-
-  bool HierarchicalTiff::GetCurrentPixelFormat(Orthanc::PixelFormat& pixelFormat,
-                                               Orthanc::PhotometricInterpretation& photometric,
-                                               ImageCompression compression)
-  {
     // http://www.awaresystems.be/imaging/tiff/tifftags/baseline.html
 
     uint16_t channels, photometricTiff, bpp, planar;
-    if (!TIFFGetField(tiff_, TIFFTAG_SAMPLESPERPIXEL, &channels) ||
+    if (!TIFFGetField(tiff, TIFFTAG_SAMPLESPERPIXEL, &channels) ||
         channels == 0 ||
-        !TIFFGetField(tiff_, TIFFTAG_PHOTOMETRIC, &photometricTiff) ||
-        !TIFFGetField(tiff_, TIFFTAG_BITSPERSAMPLE, &bpp) ||
-        !TIFFGetField(tiff_, TIFFTAG_PLANARCONFIG, &planar))
+        !TIFFGetField(tiff, TIFFTAG_PHOTOMETRIC, &photometricTiff) ||
+        !TIFFGetField(tiff, TIFFTAG_BITSPERSAMPLE, &bpp) ||
+        !TIFFGetField(tiff, TIFFTAG_PLANARCONFIG, &planar))
     {
       return false;
     }
@@ -161,6 +158,15 @@
           return false;
       }
     }
+    else if (compression == ImageCompression_None &&
+             channels == 3 &&     // This is a color image
+             bpp == 8 &&
+             planar == PLANARCONFIG_CONTIG)  // This is interleaved RGB
+    {
+      pixelFormat = Orthanc::PixelFormat_RGB24;
+      photometric = Orthanc::PhotometricInterpretation_RGB;
+      return true;
+    }
     else if (compression == ImageCompression_Jpeg &&
              channels == 1 &&     // This is a grayscale image
              bpp == 8)
@@ -198,8 +204,7 @@
           h > 0 &&
           tw > 0 &&
           th > 0 &&
-          GetCurrentCompression(compression) &&
-          GetCurrentPixelFormat(pixelFormat, photometric, compression))
+          GetCurrentDirectoryInformation(tiff_, compression, pixelFormat, photometric))
       {
         if (first)
         {