From: frog Date: Wed, 20 Oct 2004 14:30:38 +0000 (+0000) Subject: * src/gdcmDocument.cxx ftell() return properly stored in a long (i.e. X-Git-Tag: Version0.6.bp~51 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=5bf7c51796867388334836847a6874640bc83f89;p=gdcm.git * 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() --- diff --git a/ChangeLog b/ChangeLog index 4e6982ee..a27a533d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2004-10-20 Eric Boix + * 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 * Doc/CMakeLists.txt, doxygen.config.in: when dot is present the collaboration diagram and inheritance diagram should be generated with diff --git a/Example/PrintFile.cxx b/Example/PrintFile.cxx index 48bc00a0..524ac27f 100644 --- a/Example/PrintFile.cxx +++ b/Example/PrintFile.cxx @@ -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; } diff --git a/Example/PrintHeader.cxx b/Example/PrintHeader.cxx index e29f0879..201cb3c9 100644 --- a/Example/PrintHeader.cxx +++ b/Example/PrintHeader.cxx @@ -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; } diff --git a/Example/TestWrite.cxx b/Example/TestWrite.cxx index 0d7e1db4..a3c4806e 100644 --- a/Example/TestWrite.cxx +++ b/Example/TestWrite.cxx @@ -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; } diff --git a/Example/Write.cxx b/Example/Write.cxx index 16c6c139..c1be9946 100644 --- a/Example/Write.cxx +++ b/Example/Write.cxx @@ -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; } diff --git a/gdcmPython/gdcm.i b/gdcmPython/gdcm.i index b4d93b1a..9ebe8b90 100644 --- a/gdcmPython/gdcm.i +++ b/gdcmPython/gdcm.i @@ -68,6 +68,7 @@ void gdcmPythonVoidFuncArgDelete(void *arg) } } +using namespace gdcm; %} typedef unsigned short guint16; typedef unsigned int guint32; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 733c1d22..55ab9e21 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -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 diff --git a/src/gdcmDictSet.cxx b/src/gdcmDictSet.cxx index 5993675b..e03a01a4 100644 --- a/src/gdcmDictSet.cxx +++ b/src/gdcmDictSet.cxx @@ -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. diff --git a/src/gdcmDocument.cxx b/src/gdcmDocument.cxx index 1dbde430..a8b15697 100644 --- a/src/gdcmDocument.cxx +++ b/src/gdcmDocument.cxx @@ -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 << ")" diff --git a/src/gdcmFile.cxx b/src/gdcmFile.cxx index da8105e3..b565a3a4 100644 --- a/src/gdcmFile.cxx +++ b/src/gdcmFile.cxx @@ -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 diff --git a/src/gdcmFile.h b/src/gdcmFile.h index 361bc3d8..7fd947fb 100644 --- a/src/gdcmFile.h +++ b/src/gdcmFile.h @@ -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 // diff --git a/src/gdcmJPEGFragment.h b/src/gdcmJPEGFragment.h index 9b1b646a..bc9bfb36 100644 --- a/src/gdcmJPEGFragment.h +++ b/src/gdcmJPEGFragment.h @@ -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 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 diff --git a/src/gdcmJPEGFragmentsInfo.cxx b/src/gdcmJPEGFragmentsInfo.cxx index 41f802d3..06f331b3 100644 --- a/src/gdcmJPEGFragmentsInfo.cxx +++ b/src/gdcmJPEGFragmentsInfo.cxx @@ -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 diff --git a/src/gdcmJPEGFragmentsInfo.h b/src/gdcmJPEGFragmentsInfo.h index 815750eb..0ae0ac8d 100644 --- a/src/gdcmJPEGFragmentsInfo.h +++ b/src/gdcmJPEGFragmentsInfo.h @@ -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 +#include 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 index 477ec99f..00000000 --- a/src/gdcmParsePixels.cxx +++ /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;iGetSwapCode()) { - 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;iGetSwapCode()) { - 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 - diff --git a/src/gdcmPixelConvert.cxx b/src/gdcmPixelConvert.cxx index 4649cbb1..962088f4 100644 --- a/src/gdcmPixelConvert.cxx +++ b/src/gdcmPixelConvert.cxx @@ -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 diff --git a/src/gdcmPixelConvert.h b/src/gdcmPixelConvert.h index e65a701c..74a01d1e 100644 --- a/src/gdcmPixelConvert.h +++ b/src/gdcmPixelConvert.h @@ -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 ); diff --git a/src/gdcmRLEFrame.h b/src/gdcmRLEFrame.h index f7dcf0d5..111ac48c 100644 --- a/src/gdcmRLEFrame.h +++ b/src/gdcmRLEFrame.h @@ -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 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 diff --git a/src/gdcmRLEFramesInfo.cxx b/src/gdcmRLEFramesInfo.cxx index cf24f379..0286031e 100644 --- a/src/gdcmRLEFramesInfo.cxx +++ b/src/gdcmRLEFramesInfo.cxx @@ -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 diff --git a/src/gdcmRLEFramesInfo.h b/src/gdcmRLEFramesInfo.h index d5ff6e10..5afa003e 100644 --- a/src/gdcmRLEFramesInfo.h +++ b/src/gdcmRLEFramesInfo.h @@ -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