From 145420342c6af4fc7a257c809a105ecd3d8d85cc Mon Sep 17 00:00:00 2001 From: regrain Date: Fri, 28 Jan 2005 15:42:21 +0000 Subject: [PATCH] * Remove friend between PixelReadConverter and RLEFramesInfo, JPEGFragmentsInfo -- BeNours --- ChangeLog | 4 ++- src/gdcmJPEGFragmentsInfo.cxx | 29 ++++++++++++++++++-- src/gdcmJPEGFragmentsInfo.h | 10 ++++--- src/gdcmPixelReadConvert.cxx | 50 +++++++++++++++++------------------ src/gdcmRLEFramesInfo.cxx | 23 ++++++++++++++-- src/gdcmRLEFramesInfo.h | 10 ++++--- 6 files changed, 88 insertions(+), 38 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4c2a189e..86dce9bf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2005-01-28 Benoit Regrain - * Remove friend classes between DocEntry and File + * Remove friend between DocEntry and File classes + * Remove friend between PixelReadConverter and RLEFramesInfo, + JPEGFragmentsInfo 2005-01-28 Benoit Regrain * src/gdcmFile.cxx, gdcmDocument.cxx : fix the bug on the group|element diff --git a/src/gdcmJPEGFragmentsInfo.cxx b/src/gdcmJPEGFragmentsInfo.cxx index 6adb33f0..0a905ad4 100644 --- a/src/gdcmJPEGFragmentsInfo.cxx +++ b/src/gdcmJPEGFragmentsInfo.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmJPEGFragmentsInfo.cxx,v $ Language: C++ - Date: $Date: 2005/01/26 16:28:58 $ - Version: $Revision: 1.11 $ + Date: $Date: 2005/01/28 15:42:22 $ + 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 @@ -17,6 +17,8 @@ =========================================================================*/ #include "gdcmJPEGFragmentsInfo.h" +#include "gdcmDebug.h" + #include namespace gdcm @@ -134,5 +136,28 @@ void JPEGFragmentsInfo::AddFragment(JPEGFragment *fragment) Fragments.push_back(fragment); } +JPEGFragment *JPEGFragmentsInfo::GetFirstFragment() +{ + ItFragments = Fragments.begin(); + if (ItFragments != Fragments.end()) + return *ItFragments; + return NULL; +} + +JPEGFragment *JPEGFragmentsInfo::GetNextFragment() +{ + gdcmAssertMacro (ItFragments != Fragments.end()); + + ++ItFragments; + if (ItFragments != Fragments.end()) + return *ItFragments; + return NULL; +} + +unsigned int JPEGFragmentsInfo::GetFragmentCount() +{ + return Fragments.size(); +} + } // end namespace gdcm diff --git a/src/gdcmJPEGFragmentsInfo.h b/src/gdcmJPEGFragmentsInfo.h index 95101cb0..20f17977 100644 --- a/src/gdcmJPEGFragmentsInfo.h +++ b/src/gdcmJPEGFragmentsInfo.h @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmJPEGFragmentsInfo.h,v $ Language: C++ - Date: $Date: 2005/01/26 16:28:58 $ - Version: $Revision: 1.14 $ + Date: $Date: 2005/01/28 15:42:22 $ + Version: $Revision: 1.15 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -50,6 +50,9 @@ public: void DecompressJPEGFramesFromFile(std::ifstream *fp, uint8_t *buffer, int nBits, int numBytes, int length); void AddFragment(JPEGFragment *fragment); + JPEGFragment *GetFirstFragment(); + JPEGFragment *GetNextFragment(); + unsigned int GetFragmentCount(); private: typedef std::list JPEGFragmentsList; @@ -59,8 +62,7 @@ private: void *SampBuffer; char* pimage; JPEGFragmentsList Fragments; - - friend class PixelReadConvert; + JPEGFragmentsList::iterator ItFragments; }; } // end namespace gdcm diff --git a/src/gdcmPixelReadConvert.cxx b/src/gdcmPixelReadConvert.cxx index 300bedb3..d3db3012 100644 --- a/src/gdcmPixelReadConvert.cxx +++ b/src/gdcmPixelReadConvert.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmPixelReadConvert.cxx,v $ Language: C++ - Date: $Date: 2005/01/26 16:28:58 $ - Version: $Revision: 1.36 $ + Date: $Date: 2005/01/28 15:42:22 $ + Version: $Revision: 1.37 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -243,21 +243,20 @@ bool PixelReadConvert::ReadAndDecompressRLEFile( std::ifstream *fp ) long RawSegmentSize = XSize * YSize; // Loop on the frame[s] - for( RLEFramesInfo::RLEFrameList::iterator - it = RLEInfo->Frames.begin(); - it != RLEInfo->Frames.end(); - ++it ) + RLEFrame *frame = RLEInfo->GetFirstFrame(); + while( frame ) { // Loop on the fragments - for( unsigned int k = 1; k <= (*it)->GetNumberOfFragments(); k++ ) + for( unsigned int k = 1; k <= frame->GetNumberOfFragments(); k++ ) { - fp->seekg( (*it)->GetOffset(k) , std::ios::beg ); - (void)ReadAndDecompressRLEFragment( subRaw, - (*it)->GetLength(k), - RawSegmentSize, - fp ); + fp->seekg(frame->GetOffset(k),std::ios::beg); + ReadAndDecompressRLEFragment(subRaw, + frame->GetLength(k), + RawSegmentSize, + fp); subRaw += RawSegmentSize; } + frame = RLEInfo->GetNexttFrame(); } if ( BitsAllocated == 16 ) @@ -425,8 +424,8 @@ ReadAndDecompressJPEGSingleFrameFragmentsFromFile( std::ifstream *fp ) JPEGInfo->ReadAllFragments(fp, buffer); // kludge: // FIXME - JPEGFragmentsInfo::JPEGFragmentsList::const_iterator it = JPEGInfo->Fragments.begin(); - (*it)->DecompressJPEGSingleFrameFragmentsFromFile(buffer, totalLength, Raw, BitsStored); + JPEGFragment *fragment = JPEGInfo->GetFirstFragment(); + fragment->DecompressJPEGSingleFrameFragmentsFromFile(buffer, totalLength, Raw, BitsStored); // free local buffer delete [] buffer; @@ -458,19 +457,21 @@ ReadAndDecompressJPEGFragmentedFramesFromFile( std::ifstream *fp ) size_t howManyWritten = 0; size_t fragmentLength = 0; - JPEGFragmentsInfo::JPEGFragmentsList::const_iterator it; - for( it = JPEGInfo->Fragments.begin() ; - (it != JPEGInfo->Fragments.end()) && (howManyRead < totalLength); - ++it ) + JPEGFragment *fragment = JPEGInfo->GetFirstFragment(); + while( fragment ) { - fragmentLength += (*it)->GetLength(); + fragmentLength += fragment->GetLength(); if (howManyRead > fragmentLength) continue; - (*it)->DecompressJPEGFragmentedFramesFromFile(buffer, Raw, BitsStored, howManyRead, howManyWritten, totalLength); + fragment->DecompressJPEGFragmentedFramesFromFile(buffer, Raw, BitsStored, + howManyRead, howManyWritten, + totalLength); if (howManyRead < fragmentLength) howManyRead = fragmentLength; + + fragment = JPEGInfo->GetNextFragment(); } // free local buffer @@ -490,28 +491,27 @@ bool PixelReadConvert::ReadAndDecompressJPEGFile( std::ifstream *fp ) if ( IsJPEG2000 ) { gdcmVerboseMacro( "Sorry, JPEG2000 not yet taken into account" ); - fp->seekg( (*JPEGInfo->Fragments.begin())->GetOffset(), std::ios::beg); + fp->seekg( JPEGInfo->GetFirstFragment()->GetOffset(), std::ios::beg); // if ( ! gdcm_read_JPEG2000_file( fp,Raw ) ) - gdcmVerboseMacro( "Wrong Blue LUT descriptor" ); return false; } if ( IsJPEGLS ) { gdcmVerboseMacro( "Sorry, JPEG-LS not yet taken into account" ); - fp->seekg( (*JPEGInfo->Fragments.begin())->GetOffset(), std::ios::beg); + fp->seekg( JPEGInfo->GetFirstFragment()->GetOffset(), std::ios::beg); // if ( ! gdcm_read_JPEGLS_file( fp,Raw ) ) return false; } - if ( ( ZSize == 1 ) && ( JPEGInfo->Fragments.size() > 1 ) ) + if ( ( ZSize == 1 ) && ( JPEGInfo->GetFragmentCount() > 1 ) ) { // we have one frame split into several fragments // we will pack those fragments into a single buffer and // read from it return ReadAndDecompressJPEGSingleFrameFragmentsFromFile( fp ); } - else if (JPEGInfo->Fragments.size() == (size_t)ZSize) + else if (JPEGInfo->GetFragmentCount() == (size_t)ZSize) { } // if ( ( ZSize == 1 ) && ( JPEGInfo->Fragments.size() > 1 ) ) diff --git a/src/gdcmRLEFramesInfo.cxx b/src/gdcmRLEFramesInfo.cxx index c79bc22a..ba65b834 100644 --- a/src/gdcmRLEFramesInfo.cxx +++ b/src/gdcmRLEFramesInfo.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmRLEFramesInfo.cxx,v $ Language: C++ - Date: $Date: 2005/01/26 16:28:58 $ - Version: $Revision: 1.6 $ + Date: $Date: 2005/01/28 15:42:22 $ + 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 @@ -17,6 +17,7 @@ =========================================================================*/ #include "gdcmRLEFramesInfo.h" +#include "gdcmDebug.h" namespace gdcm { @@ -59,4 +60,22 @@ void RLEFramesInfo::AddFrame(RLEFrame *frame) Frames.push_back(frame); } +RLEFrame *RLEFramesInfo::GetFirstFrame() +{ + ItFrames = Frames.begin(); + if (ItFrames != Frames.end()) + return *ItFrames; + return NULL; +} + +RLEFrame *RLEFramesInfo::GetNexttFrame() +{ + gdcmAssertMacro (ItFrames != Frames.end()); + + ++ItFrames; + if (ItFrames != Frames.end()) + return *ItFrames; + return NULL; +} + } // end namespace gdcm diff --git a/src/gdcmRLEFramesInfo.h b/src/gdcmRLEFramesInfo.h index a88a670a..5d7c2232 100644 --- a/src/gdcmRLEFramesInfo.h +++ b/src/gdcmRLEFramesInfo.h @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmRLEFramesInfo.h,v $ Language: C++ - Date: $Date: 2005/01/26 16:28:58 $ - Version: $Revision: 1.12 $ + Date: $Date: 2005/01/28 15:42:22 $ + Version: $Revision: 1.13 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -48,12 +48,14 @@ public: void AddFrame(RLEFrame *frame); + RLEFrame *GetFirstFrame(); + RLEFrame *GetNexttFrame(); + private: typedef std::list RLEFrameList; RLEFrameList Frames; - - friend class PixelReadConvert; + RLEFrameList::iterator ItFrames; }; } // end namespace gdcm -- 2.45.1