]> Creatis software - gdcm.git/commitdiff
* src/gdcmDocument.cxx ftell() return properly stored in a long (i.e.
authorfrog <frog>
Wed, 20 Oct 2004 14:30:38 +0000 (14:30 +0000)
committerfrog <frog>
Wed, 20 Oct 2004 14:30:38 +0000 (14:30 +0000)
    no longer depends on's programmers PMS = Preposterous Mood Swings ;).
  * CLEANUP_ROUND (13) for gdcmPixelConvert
    Substituted File::ParsePixelData() with PixelConvert::Print() new
    method:
    - src/gdcmParsePixels.cxx removed (only contained File::ParsePixelData())
    - src/gdcmRLEFrame.cxx, gdcmJPEGFragment.cxx added. Added a ::Print()
      method to those classes.
    - src/gdcmFile.[cxx|h]:
      -- Added a ::Print() method.
      -- PixelConverter is now a reference instead of a member.
      -- gdcmPython/gdcm.i: added "using namespace gdcm" in order for
         gdcm_wrap.cxx to "understand" File::GetPixelConverter()

20 files changed:
ChangeLog
Example/PrintFile.cxx
Example/PrintHeader.cxx
Example/TestWrite.cxx
Example/Write.cxx
gdcmPython/gdcm.i
src/CMakeLists.txt
src/gdcmDictSet.cxx
src/gdcmDocument.cxx
src/gdcmFile.cxx
src/gdcmFile.h
src/gdcmJPEGFragment.h
src/gdcmJPEGFragmentsInfo.cxx
src/gdcmJPEGFragmentsInfo.h
src/gdcmParsePixels.cxx [deleted file]
src/gdcmPixelConvert.cxx
src/gdcmPixelConvert.h
src/gdcmRLEFrame.h
src/gdcmRLEFramesInfo.cxx
src/gdcmRLEFramesInfo.h

index 4e6982ee88b4a6bd7112e8a47e9e44620b83b6ff..a27a533dce5e0b11e517cf5b70b02f4c6d4c4c8c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2004-10-20 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
+  * src/gdcmDocument.cxx ftell() return properly stored in a long (i.e.
+    no longer depends on's programmers PMS = Preposterous Mood Swings ;).
+  * CLEANUP_ROUND (13) for gdcmPixelConvert
+    Substituted File::ParsePixelData() with PixelConvert::Print() new
+    method:
+    - src/gdcmParsePixels.cxx removed (only contained File::ParsePixelData())
+    - src/gdcmRLEFrame.cxx, gdcmJPEGFragment.cxx added. Added a ::Print()
+      method to those classes.
+    - src/gdcmFile.[cxx|h]:
+      -- Added a ::Print() method.
+      -- PixelConverter is now a reference instead of a member.
+      -- gdcmPython/gdcm.i: added "using namespace gdcm" in order for
+         gdcm_wrap.cxx to "understand" File::GetPixelConverter()
+
 2004-10-18 Eric Boix <Eric.Boix@creatis.insa-lyon.fr>
   * Doc/CMakeLists.txt, doxygen.config.in: when dot is present the
     collaboration diagram and inheritance diagram should be generated with
index 48bc00a031d62b0068615334ddef4d6b1a956042..524ac27fc3886c579083da512d800bb95f28b86c 100644 (file)
@@ -71,7 +71,7 @@ int main(int argc, char* argv[])
   {
       std::cout << std::endl << "==========================================="
                   << std::endl; 
-         f1->ParsePixelData();
+         f1->GetPixelConverter()->Print();
       std::cout << std::endl << "==========================================="
                   << std::endl; 
    }      
index e29f08795d8de2b0809fc9e7bc959ca06a000ae8..201cb3c90cc39ecfc36c3136431a25bed9055af0 100644 (file)
@@ -50,7 +50,7 @@ int main(int argc, char* argv[])
   {
   std::cout << std::endl << "==========================================="
                   << std::endl; 
-        e2->ParsePixelData();
+        e2->GetPixelConverter()->Print();
   std::cout << std::endl << "==========================================="
                   << std::endl; 
   }
index 0d7e1db4bb9012663e19214354196c7422f7d4f4..a3c4806e2bf7632eac51e6707097656a33bb78c6 100644 (file)
@@ -92,7 +92,7 @@ int main(int argc, char* argv[])
       && transferSyntaxName != "Uncompressed ACR-NEMA"     ) {
       std::cout << std::endl << "==========================================="
                 << std::endl; 
-      f1->ParsePixelData();
+      f1->GetPixelConverter()->Print();
       std::cout << std::endl << "==========================================="
                 << std::endl; 
    }
index 16c6c1395cd4d7caa1544dfba4b2ca12954239d2..c1be99465ff6b23d546662b8d3c454e662f779ad 100644 (file)
@@ -87,7 +87,7 @@ int main(int argc, char* argv[])
       && transferSyntaxName != "Uncompressed ACR-NEMA"     ) {
       std::cout << std::endl << "==========================================="
                 << std::endl; 
-      f1->ParsePixelData();
+      f1->GetPixelConverter()->Print();
       std::cout << std::endl << "==========================================="
                 << std::endl; 
    }
index b4d93b1aa1342c6afe00249243a104fb2d9e7bae..9ebe8b90510bcfcc3f04146d5fd025314ff6c1ee 100644 (file)
@@ -68,6 +68,7 @@ void gdcmPythonVoidFuncArgDelete(void *arg)
     }
 }
 
+using namespace gdcm;
 %}
 typedef  unsigned short guint16;
 typedef  unsigned int guint32;
index 733c1d22f416a6c48d928dd9aa6b8c61cc9df1bf..55ab9e211f9a9871207ecc018124f4e5e3a2ef92 100644 (file)
@@ -32,13 +32,14 @@ SET(libgdcm_la_SOURCES
    gdcmGlobal.cxx
    gdcmHeader.cxx
    gdcmHeaderHelper.cxx
+   gdcmJPEGFragment.cxx
    gdcmJPEGFragmentsInfo.cxx
    gdcmJpeg8.cxx
    gdcmJpeg12.cxx
    gdcmJpeg16.cxx
    gdcmJpeg2000.cxx
-   gdcmParsePixels.cxx
    gdcmPixelConvert.cxx
+   gdcmRLEFrame.cxx
    gdcmRLEFramesInfo.cxx
    gdcmSeqEntry.cxx
    gdcmSQItem.cxx
index 5993675bced31b532f20c4d800dffc684d1335f6..e03a01a4d242b372d6ce2ec6f34ea09e06ecb99a 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmDictSet.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/10/18 02:31:58 $
-  Version:   $Revision: 1.40 $
+  Date:      $Date: 2004/10/20 14:30:40 $
+  Version:   $Revision: 1.41 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -136,7 +136,7 @@ EntryNamesByCatMap * DictSet::GetPubDictEntryNamesByCategory()
  * \ingroup DictSet
  * \brief   Loads a dictionary from a specified file, and add it
  *          to already the existing ones contained in this DictSet.
- * @param   fileName Absolute or relative filename containing the
+ * @param   filename Absolute or relative filename containing the
  *          dictionary to load.
  * @param   name Symbolic name that be used as identifier of the newly 
  *          created dictionary.
index 1dbde430bb3f710d2f7e093fdafe121fb46aadec..a8b156974a0786e52f97150d9a9203145f60102b 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmDocument.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/10/18 12:49:22 $
-  Version:   $Revision: 1.105 $
+  Date:      $Date: 2004/10/20 14:30:40 $
+  Version:   $Revision: 1.106 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -2311,7 +2311,7 @@ bool Document::IsDocEntryAnInteger(DocEntry *entry)
          // encounter such an ill-formed image, we simply display a warning
          // message and proceed on parsing (while crossing fingers).
          std::ostringstream s;
-         int filePosition = ftell(Fp);
+         long filePosition = ftell(Fp);
          s << "Erroneous Group Length element length  on : (" \
            << std::hex << group << " , " << element 
            << ") -before- position x(" << filePosition << ")"
index da8105e3b8eaca4f2bb10fb1851c8397f510ae9e..b565a3a498604de9b834ae91a247ae9f15d7ed4f 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmFile.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/10/18 12:49:22 $
-  Version:   $Revision: 1.145 $
+  Date:      $Date: 2004/10/20 14:30:40 $
+  Version:   $Revision: 1.146 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -84,7 +84,8 @@ void File::Initialise()
          ImageDataSize = ImageDataSizeRaw;
       }
 
-      PixelConverter.GrabInformationsFromHeader( HeaderInternal );
+      PixelConverter = new PixelConvert;
+      PixelConverter->GrabInformationsFromHeader( HeaderInternal );
    }
    SaveInitialValues();
 }
@@ -362,11 +363,11 @@ size_t File::GetImageDataIntoVector (void* destination, size_t maxSize)
    }
                             
    FILE* fp = HeaderInternal->OpenFile();
-   if ( PixelConverter.BuildRGBImage( fp ) )
+   if ( PixelConverter->BuildRGBImage( fp ) )
    {
       memmove( destination,
-               (void*)PixelConverter.GetRGB(),
-               PixelConverter.GetRGBSize() );
+               (void*)PixelConverter->GetRGB(),
+               PixelConverter->GetRGBSize() );
     
       // now, it's an RGB image
       // Lets's write it in the Header
@@ -383,8 +384,8 @@ size_t File::GetImageDataIntoVector (void* destination, size_t maxSize)
    }
    else
    { 
-      // PixelConverter.BuildRGBImage( fp ) failed probably because
-      // PixelConverter.GetLUTRGBA() failed:
+      // PixelConverter->BuildRGBImage() failed probably because
+      // PixelConverter->GetLUTRGBA() failed:
       // (gdcm-US-ALOKA-16.dcm), contains Segmented xxx Palette Color 
       // that are *more* than 65535 long ?!? 
       // No idea how to manage such an image !
@@ -491,13 +492,13 @@ void File::GetImageDataIntoVectorRaw (void* destination, size_t maxSize)
    }
 
    FILE* fp = HeaderInternal->OpenFile();
-   PixelConverter.ReadAndDecompressPixelData( fp );
+   PixelConverter->ReadAndDecompressPixelData( fp );
    HeaderInternal->CloseFile();
    memmove( destination,
-            (void*)PixelConverter.GetDecompressed(),
-            PixelConverter.GetDecompressedSize() );
+            (void*)PixelConverter->GetDecompressed(),
+            PixelConverter->GetDecompressedSize() );
 
-   if ( ! PixelConverter.IsDecompressedRGB() )
+   if ( ! PixelConverter->IsDecompressedRGB() )
    {
       return;
    }
@@ -713,11 +714,11 @@ bool File::WriteBase (std::string const & fileName, FileType type)
 }
 
 /**
- * \brief Access to the underlying \ref PixelConvertver RGBA LUT
+ * \brief Access to the underlying \ref PixelConverter RGBA LUT
  */
 uint8_t* File::GetLutRGBA()
 {
-   return PixelConverter.GetLutRGBA();
+   return PixelConverter->GetLutRGBA();
 }
 
 } // end namespace gdcm
index 361bc3d81285154b3360d1b89e92decc94cf8e1a..7fd947fb16ea947a2aecfd31b778f4a25d43e91a 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmFile.h,v $
   Language:  C++
-  Date:      $Date: 2004/10/18 12:49:22 $
-  Version:   $Revision: 1.63 $
+  Date:      $Date: 2004/10/20 14:30:40 $
+  Version:   $Revision: 1.64 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -51,6 +51,9 @@ public:
    /// Accessor to \ref ImageDataSizeRaw
    size_t GetImageDataSizeRaw(){ return ImageDataSizeRaw; };
 
+   /// Accessor to \ref PixelConverter
+   PixelConvert* GetPixelConverter(){ return PixelConverter; };
+
    uint8_t* GetImageData();
    size_t GetImageDataIntoVector(void* destination, size_t maxSize);
    uint8_t* GetImageDataRaw();
@@ -70,10 +73,6 @@ public:
    bool WriteDcmExplVR(std::string const& fileName);
    bool WriteAcr      (std::string const& fileName);
 
-   // Don't look any longer for the code : 
-   // It's in file gdcmParsePixels.cxx
-   bool ParsePixelData();
-
    virtual bool SetEntryByNumber(std::string const& content,
                                  uint16_t group, uint16_t element)
    { 
@@ -113,12 +112,13 @@ private:
    ///  the destructor is in charge of deletion.
    bool SelfHeader;
    
-   /// wether already parsed 
+   /// Wether already parsed or not
    bool Parsed;
       
-   /// FIXME
-   PixelConvert PixelConverter;
-//
+   /// Utility pixel converter
+   PixelConvert* PixelConverter;
+
+/// FIXME
 // --------------- Will be moved to a PixelData class
 //
 
index 9b1b646a99faf9ddd7ec38acd4d1f070979aa037..bc9bfb36d6207b4280791b0f2fa5eb09b01470b0 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmJPEGFragment.h,v $
   Language:  C++
-  Date:      $Date: 2004/10/14 22:35:01 $
-  Version:   $Revision: 1.3 $
+  Date:      $Date: 2004/10/20 14:30:40 $
+  Version:   $Revision: 1.4 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -21,6 +21,7 @@
 #define GDCMJPEGFRAGMENT_H
 
 #include "gdcmCommon.h"
+#include <iostream>
 
 namespace gdcm 
 {
@@ -43,11 +44,9 @@ friend class File;
 friend class PixelConvert;
    long    Offset;
    long    Length;
-   JPEGFragment()
-   {
-      Offset = 0;
-      Length = 0;
-   }
+public:
+   JPEGFragment();
+   void Print( std::string indent = "", std::ostream &os = std::cout );
 };
 } // end namespace gdcm
 
index 41f802d39dd9e34eb1a55605f81a1ab5e5e567fe..06f331b3e6a3f27f8edd60fa9b60151dd929cdb8 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmJPEGFragmentsInfo.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/10/12 04:35:46 $
-  Version:   $Revision: 1.2 $
+  Date:      $Date: 2004/10/20 14:30:40 $
+  Version:   $Revision: 1.3 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -21,6 +21,9 @@
 namespace gdcm 
 {
 
+/**
+ * \brief Default destructor
+ */
 JPEGFragmentsInfo::~JPEGFragmentsInfo()
 {
    for(JPEGFragmentsList::iterator it  = Fragments.begin();
@@ -31,4 +34,31 @@ JPEGFragmentsInfo::~JPEGFragmentsInfo()
    }
    Fragments.clear();
 }
+
+/**
+ * \brief        Print self.
+ * @param indent Indentation string to be prepended during printing.
+ * @param os     Stream to print to.
+ */
+void JPEGFragmentsInfo::Print( std::string indent, std::ostream &os )
+{
+   os << indent
+      << "----------------- JPEG fragments --------------------------------"
+      << std::endl;
+   os << indent
+      << "Total number of fragments : " << Fragments.size()
+      << std::endl;
+   int fragmentNumber = 0;
+   for(JPEGFragmentsList::iterator it  = Fragments.begin();
+                                   it != Fragments.end();
+                                 ++it)
+   {
+      os << indent
+         << "   fragment number :" << fragmentNumber++;
+      (*it)->Print( indent + "   ", os );
+      os << std::endl;
+   }
+}
+
+
 } // end namespace gdcm
index 815750eb0f44353c3cd120f06f11cd6802edd99f..0ae0ac8d1ae5c89040f4b5ac823d9267eeb6c2d1 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmJPEGFragmentsInfo.h,v $
   Language:  C++
-  Date:      $Date: 2004/10/18 12:49:22 $
-  Version:   $Revision: 1.4 $
+  Date:      $Date: 2004/10/20 14:30:40 $
+  Version:   $Revision: 1.5 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -22,6 +22,7 @@
 
 #include "gdcmJPEGFragment.h"
 #include <list>
+#include <iostream>
 
 namespace gdcm 
 {
@@ -47,6 +48,7 @@ private:
    JPEGFragmentsList Fragments;
 public:
    ~JPEGFragmentsInfo();
+   void Print( std::string indent = "", std::ostream &os = std::cout );
 };
 } // end namespace gdcm
 
diff --git a/src/gdcmParsePixels.cxx b/src/gdcmParsePixels.cxx
deleted file mode 100644 (file)
index 477ec99..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-/*=========================================================================
-                                                                                
-  Program:   gdcm
-  Module:    $RCSfile: gdcmParsePixels.cxx,v $
-  Language:  C++
-  Date:      $Date: 2004/10/12 04:35:46 $
-  Version:   $Revision: 1.12 $
-                                                                                
-  Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
-  l'Image). All rights reserved. See Doc/License.txt or
-  http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
-                                                                                
-     This software is distributed WITHOUT ANY WARRANTY; without even
-     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-     PURPOSE.  See the above copyright notices for more information.
-                                                                                
-=========================================================================*/
-
-#include "gdcmCommon.h"
-#include "gdcmFile.h"
-
-namespace gdcm 
-{
-
-#define str2num(str, typeNum) *((typeNum *)(str))
-
-//-----------------------------------------------------------------------------
-/**
- * \ingroup File
- * \brief   Parse pixel data from disk and *prints* the result
- * \        For multi-fragment Jpeg/Rle files checking purpose *only*
- * \        Allows to 'see' if the file *does* conform
- * \       (some of them do not)
- * \        with Dicom Part 3, Annex A (PS 3.5-2003, page 58, page 85)
- *
- */
-bool File::ParsePixelData(void) {
-// DO NOT remove the printf s.
-// The ONLY purpose of this method is to PRINT the content
-   FILE* fp;
-
-   if ( !(fp=GetHeader()->OpenFile()))
-      return false;
-      
-    if ( fseek(fp, GetHeader()->GetPixelOffset(), SEEK_SET) == -1 ) {
-      GetHeader()->CloseFile();
-      return false;
-   } 
-   
-   if ( !GetHeader()->IsDicomV3()                             ||
-        GetHeader()->IsImplicitVRLittleEndianTransferSyntax() ||
-        GetHeader()->IsExplicitVRLittleEndianTransferSyntax() ||
-        GetHeader()->IsExplicitVRBigEndianTransferSyntax()    ||
-        GetHeader()->IsDeflatedExplicitVRLittleEndianTransferSyntax() ) { 
-        
-        printf ("File::ParsePixelData : non JPEG/RLE File\n");
-        return false;       
-   }        
-
-   int nb;
-   std::string str_nb=GetHeader()->GetEntryByNumber(0x0028,0x0100);
-   if (str_nb == GDCM_UNFOUND ) {
-      nb = 16;
-   } else {
-      nb = atoi(str_nb.c_str() );
-      if (nb == 12) nb =16;
-   }
-   //int nBytes= nb/8;   //FIXME
-      
-   //int taille = GetHeader()->GetXSize() * GetHeader()->GetYSize() * GetHeader()->GetSamplesPerPixel(); 
-         
-   printf ("Checking the Dicom-encapsulated Jpeg/RLE Pixels\n");
-      
-   uint16_t ItemTagGr,ItemTagEl; 
-   int ln;
-   long ftellRes;
-   //char * destination = NULL;
-
-  // -------------------- for Parsing : Position on begining of Jpeg/RLE Pixels 
-
-   if( !GetHeader()->IsRLELossLessTransferSyntax()) {
-
-      // JPEG Image
-      ftellRes=ftell(fp);
-      fread(&ItemTagGr,2,1,fp);  //Reading (fffe):Basic Offset Table Item Tag Gr
-      fread(&ItemTagEl,2,1,fp);  //Reading (e000):Basic Offset Table Item Tag El
-      if(GetHeader()->GetSwapCode()) {
-         ItemTagGr=GetHeader()->SwapShort(ItemTagGr); 
-         ItemTagEl=GetHeader()->SwapShort(ItemTagEl);            
-      }
-      printf ("at %x : ItemTag (should be fffe,e000): %04x,%04x\n",
-                (unsigned)ftellRes,ItemTagGr,ItemTagEl );
-      ftellRes=ftell(fp);
-      fread(&ln,4,1,fp); 
-      if(GetHeader()->GetSwapCode()) 
-         ln=GetHeader()->SwapLong(ln);    // Basic Offset Table Item Length
-      printf("at %x : Basic Offset Table Item Length (\?\?) %d x(%08x)\n",
-            (unsigned)ftellRes,ln,ln);
-      if (ln != 0) {
-         // What is it used for ??
-         char * BasicOffsetTableItemValue= new char[ln+1];
-         fread(BasicOffsetTableItemValue,ln,1,fp); 
-         uint32_t a;
-         for (int i=0;i<ln;i+=4){
-            a=str2num(&BasicOffsetTableItemValue[i],uint32_t);
-            printf("      x(%08x)  %d\n",a,a);
-         }              
-      }
-      
-      ftellRes=ftell(fp);
-      fread(&ItemTagGr,2,1,fp);  // Reading (fffe) : Item Tag Gr
-      fread(&ItemTagEl,2,1,fp);  // Reading (e000) : Item Tag El
-      if(GetHeader()->GetSwapCode()) {
-         ItemTagGr=GetHeader()->SwapShort(ItemTagGr); 
-         ItemTagEl=GetHeader()->SwapShort(ItemTagEl);            
-      }  
-      printf ("at %x : ItemTag (should be fffe,e000 or e0dd): %04x,%04x\n",
-            (unsigned)ftellRes,ItemTagGr,ItemTagEl );
-      
-      while ( ( ItemTagGr==0xfffe) && (ItemTagEl!=0xe0dd) ) { // Parse fragments
-      
-         ftellRes=ftell(fp);
-         fread(&ln,4,1,fp); 
-         if(GetHeader()->GetSwapCode()) 
-            ln=GetHeader()->SwapLong(ln);    // length
-         printf("      at %x : fragment length %d x(%08x)\n",
-                (unsigned)ftellRes, ln,ln);
-
-        // destination += taille * nBytes; // location in user's memory        
-        //printf ("      Destination will be x(%x) = %d \n",
-        //     destination,destination );
-
-         // ------------------------                                     
-         fseek(fp,ln,SEEK_CUR); // skipping (not reading) fragment pixels    
-         // ------------------------              
-     
-         ftellRes=ftell(fp);
-         fread(&ItemTagGr,2,1,fp);  // Reading (fffe) : Item Tag Gr
-         fread(&ItemTagEl,2,1,fp);  // Reading (e000) : Item Tag El
-         if(GetHeader()->GetSwapCode()) {
-            ItemTagGr=GetHeader()->SwapShort(ItemTagGr); 
-            ItemTagEl=GetHeader()->SwapShort(ItemTagEl);            
-         }
-         printf ("at %x : ItemTag (should be fffe,e000 or e0dd): %04x,%04x\n",
-               (unsigned)ftellRes,ItemTagGr,ItemTagEl );
-      } 
-
-   } else {
-
-      // RLE Image
-      long RleSegmentLength[15],fragmentLength;
-      uint32_t nbRleSegments;
-      uint32_t RleSegmentOffsetTable[15];
-      ftellRes=ftell(fp);
-      // Basic Offset Table with Item Value
-         // Item Tag
-      fread(&ItemTagGr,2,1,fp);  //Reading (fffe):Basic Offset Table Item Tag Gr
-      fread(&ItemTagEl,2,1,fp);  //Reading (e000):Basic Offset Table Item Tag El
-      if(GetHeader()->GetSwapCode()) {
-         ItemTagGr=GetHeader()->SwapShort(ItemTagGr); 
-         ItemTagEl=GetHeader()->SwapShort(ItemTagEl);            
-      }
-      printf ("at %x : ItemTag (should be fffe,e000): %04x,%04x\n",
-                (unsigned)ftellRes,ItemTagGr,ItemTagEl );
-         // Item Length
-      ftellRes=ftell(fp);
-      fread(&ln,4,1,fp); 
-      if(GetHeader()->GetSwapCode()) 
-         ln=GetHeader()->SwapLong(ln);    // Basic Offset Table Item Length
-      printf("at %x : Basic Offset Table Item Length (\?\?) %d x(%08x)\n",
-            (unsigned)ftellRes,ln,ln);
-      if (ln != 0) {
-         // What is it used for ??
-         char * BasicOffsetTableItemValue= new char[ln+1];
-         fread(BasicOffsetTableItemValue,ln,1,fp); 
-         uint32_t a;
-         for (int i=0;i<ln;i+=4){
-            a=str2num(&BasicOffsetTableItemValue[i],uint32_t);
-            printf("      x(%08x)  %d\n",a,a);
-         }              
-      }
-
-      ftellRes=ftell(fp);
-      fread(&ItemTagGr,2,1,fp);  // Reading (fffe) : Item Tag Gr
-      fread(&ItemTagEl,2,1,fp);  // Reading (e000) : Item Tag El
-      if(GetHeader()->GetSwapCode()) {
-         ItemTagGr=GetHeader()->SwapShort(ItemTagGr); 
-         ItemTagEl=GetHeader()->SwapShort(ItemTagEl);            
-      }  
-      printf ("at %x : ItemTag (should be fffe,e000 or e0dd): %04x,%04x\n",
-            (unsigned)ftellRes,ItemTagGr,ItemTagEl );
-
-      // while 'Sequence Delimiter Item' (fffe,e0dd) not found
-      while (  ( ItemTagGr == 0xfffe) && (ItemTagEl != 0xe0dd) ) { 
-      // Parse fragments of the current Fragment (Frame)    
-         ftellRes=ftell(fp);
-         fread(&fragmentLength,4,1,fp); 
-         if(GetHeader()->GetSwapCode()) 
-            fragmentLength=GetHeader()->SwapLong(fragmentLength);    // length
-         printf("      at %x : 'fragment' length %d x(%08x)\n",
-                (unsigned)ftellRes, (unsigned)fragmentLength,(unsigned)fragmentLength);
-                       
-          //------------------ scanning (not reading) fragment pixels
-         fread(&nbRleSegments,4,1,fp);  // Reading : Number of RLE Segments
-         if(GetHeader()->GetSwapCode()) 
-            nbRleSegments=GetHeader()->SwapLong(nbRleSegments);
-            printf("   Nb of RLE Segments : %d\n",nbRleSegments);
-         for(int k=1; k<=15; k++) { // Reading RLE Segments Offset Table
-            ftellRes=ftell(fp);
-            fread(&RleSegmentOffsetTable[k],4,1,fp);
-            if(GetHeader()->GetSwapCode())
-               RleSegmentOffsetTable[k]=GetHeader()->SwapLong(RleSegmentOffsetTable[k]);
-            printf("        at : %x Offset Segment %d : %d (%x)\n",
-                    (unsigned)ftellRes,k,RleSegmentOffsetTable[k],
-                    RleSegmentOffsetTable[k]);
-         }
-
-          if (nbRleSegments>1) { // skipping (not reading) RLE Segments
-             for(unsigned int k=1; k<=nbRleSegments-1; k++) { 
-                RleSegmentLength[k]=   RleSegmentOffsetTable[k+1]
-                                     - RleSegmentOffsetTable[k];
-                ftellRes=ftell(fp);
-                printf ("  Segment %d : Length = %d x(%x) Start at %x\n",
-                           k,(unsigned)RleSegmentLength[k],(unsigned)RleSegmentLength[k], (unsigned)ftellRes);
-                fseek(fp,RleSegmentLength[k],SEEK_CUR);    
-             }
-          }
-          RleSegmentLength[nbRleSegments]= fragmentLength 
-                                         - RleSegmentOffsetTable[nbRleSegments];
-          ftellRes=ftell(fp);
-          printf ("  Segment %d : Length = %d x(%x) Start at %x\n",
-                           nbRleSegments,(unsigned)RleSegmentLength[nbRleSegments],
-                           (unsigned)RleSegmentLength[nbRleSegments],(unsigned)ftellRes);
-
-          fseek(fp,RleSegmentLength[nbRleSegments],SEEK_CUR); 
-            
-         // ------------------ end of scanning fragment pixels        
-      
-         ftellRes=ftell(fp);
-         fread(&ItemTagGr,2,1,fp);  // Reading (fffe) : Item Tag Gr
-         fread(&ItemTagEl,2,1,fp);  // Reading (e000) : Item Tag El
-         if(GetHeader()->GetSwapCode()) {
-            ItemTagGr=GetHeader()->SwapShort(ItemTagGr); 
-            ItemTagEl=GetHeader()->SwapShort(ItemTagEl);            
-         }
-         printf ("at %x : ItemTag (should be fffe,e000 or e0dd): %04x,%04x\n",
-               (unsigned)ftellRes,ItemTagGr,ItemTagEl );
-      } 
-   }
-   return true;            
-}
-
-//-----------------------------------------------------------------------------
-} // end namespace gdcm
-
index 4649cbb11bf3d980077c0f5e663700503907e559..962088f4cc2a0647051d4d0c058a72b463cbb5cd 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmPixelConvert.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/10/18 12:49:22 $
-  Version:   $Revision: 1.15 $
+  Date:      $Date: 2004/10/20 14:30:40 $
+  Version:   $Revision: 1.16 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -710,7 +710,7 @@ void PixelConvert::ConvertHandleColor()
 
 /**
  * \brief Predicate to know wether the image[s] (once decompressed) is RGB.
- * \note See comments of \ref HandleColor
+ * \note See comments of \ref ConvertHandleColor
  */
 bool PixelConvert::IsDecompressedRGB()
 {
@@ -1044,6 +1044,49 @@ bool PixelConvert::BuildRGBImage( FILE* fp )
    return true;
 }
 
+/**
+ * \brief        Print self.
+ * @param indent Indentation string to be prepended during printing.
+ * @param os     Stream to print to.
+ */
+void PixelConvert::Print( std::string indent, std::ostream &os )
+{
+   os << indent
+      << "--- Pixel information -------------------------"
+      << std::endl;
+   os << indent
+      << "Pixel Data: offset " << PixelOffset
+      << " x" << std::hex << PixelOffset << std::dec
+      << "   length " << PixelDataLength
+      << " x" << std::hex << PixelDataLength << std::dec
+      << std::endl;
+
+   if ( IsRLELossless )
+   {
+      if ( RLEInfo )
+      {
+         RLEInfo->Print( indent, os );
+      }
+      else
+      {
+         dbg.Verbose(0, "PixelConvert::Print: set as RLE file "
+                        "but NO RLEinfo present.");
+      }
+   }
+
+   if ( IsJPEG2000 || IsJPEGLossless )
+   {
+      if ( JPEGInfo )
+      {
+         JPEGInfo->Print( indent, os );
+      }
+      else
+      {
+         dbg.Verbose(0, "PixelConvert::Print: set as JPEG file "
+                        "but NO JPEGinfo present.");
+      }
+   }
+}
 
 } // end namespace gdcm
 
index e65a701c0470924d1c532f48af57be3adcadb175..74a01d1e0a3625e8dc4fd315d546bfd3c0aa1a37 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmPixelConvert.h,v $
   Language:  C++
-  Date:      $Date: 2004/10/18 12:49:23 $
-  Version:   $Revision: 1.10 $
+  Date:      $Date: 2004/10/20 14:30:40 $
+  Version:   $Revision: 1.11 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -48,6 +48,8 @@ public:
    //// Predicates:
    bool IsDecompressedRGB();
 
+   void Print( std::string indent = "", std::ostream &os = std::cout );
+
 // In progress
    void GrabInformationsFromHeader( Header* header );
    bool ReadAndDecompressPixelData( FILE* fp );
index f7dcf0d5575ed2f88d88faa9dc2f5bd25e9bc8e8..111ac48cc82aae59baefa13df6bf5723d523d693 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmRLEFrame.h,v $
   Language:  C++
-  Date:      $Date: 2004/10/18 12:49:23 $
-  Version:   $Revision: 1.6 $
+  Date:      $Date: 2004/10/20 14:30:40 $
+  Version:   $Revision: 1.7 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -21,6 +21,7 @@
 #define GDCMRLEFRAME_H
 
 #include "gdcmCommon.h"
+#include <iostream>
 
 namespace gdcm 
 {
@@ -48,7 +49,9 @@ friend class PixelConvert;
    int     NumberFragments;
    long    Offset[15];
    long    Length[15];
+public:
    RLEFrame() { NumberFragments = 0; }
+   void Print( std::string indent = "", std::ostream &os = std::cout );
    
 };
 } // end namespace gdcm
index cf24f379876b949a4ca54336b74ecd2689dd6d46..0286031e671ef22c33a7a1c16cb7aad5c6bb5303 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmRLEFramesInfo.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/10/12 04:35:47 $
-  Version:   $Revision: 1.2 $
+  Date:      $Date: 2004/10/20 14:30:40 $
+  Version:   $Revision: 1.3 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -29,4 +29,28 @@ RLEFramesInfo::~RLEFramesInfo()
    }
    Frames.clear();
 }
+
+/**
+ * \brief        Print self.
+ * @param indent Indentation string to be prepended during printing.
+ * @param os     Stream to print to.
+ */
+void RLEFramesInfo::Print( std::string indent, std::ostream &os )
+{
+   os << indent
+      << "----------------- RLE frames --------------------------------"
+      << std::endl;
+   os << indent
+      << "Total number of Frames : " << Frames.size()
+      << std::endl;
+   int frameNumber = 0;
+   for(RLEFrameList::iterator it = Frames.begin(); it != Frames.end(); ++it)
+   {
+      os << indent
+         << "   frame number :" << frameNumber++
+         << std::endl;
+      (*it)->Print( indent + "   ", os );
+   }
+}
+
 } // end namespace gdcm
index d5ff6e103b6abcb0157fc70390181b32167bc085..5afa003e99f36d435e9e6fb11fb22bfc0894187b 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmRLEFramesInfo.h,v $
   Language:  C++
-  Date:      $Date: 2004/10/12 04:35:47 $
-  Version:   $Revision: 1.5 $
+  Date:      $Date: 2004/10/20 14:30:40 $
+  Version:   $Revision: 1.6 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -48,6 +48,7 @@ friend class PixelConvert;
    RLEFrameList Frames;
 public:
    ~RLEFramesInfo();
+   void Print( std::string indent = "", std::ostream &os = std::cout );
 };
 } // end namespace gdcm