From: jpr Date: Wed, 24 Sep 2003 11:37:10 +0000 (+0000) Subject: Remove using namespace std; X-Git-Tag: Version0.3.1~160 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=b6e445adae1963909952eeef10ea7c1d2e0d3e0d;p=gdcm.git Remove using namespace std; Replace string by std::string map by std::map vector by std:vector Warning "RLE part" is not yet fully checked. Remaining a lot of pb with 'color' (RGB or Palette) images --- diff --git a/src/gdcmDict.cxx b/src/gdcmDict.cxx index 6808a8d0..783073cc 100644 --- a/src/gdcmDict.cxx +++ b/src/gdcmDict.cxx @@ -13,7 +13,6 @@ #include #include "gdcmDict.h" #include "gdcmUtil.h" -using namespace std; /** * \ingroup gdcmDict @@ -42,7 +41,7 @@ gdcmDict::gdcmDict(std::string & FileName) { from.getline(buff, 256, '\n'); name = buff; gdcmDictEntry * newEntry = new gdcmDictEntry(group, element, - vr, fourth, name); + vr, fourth, name); // FIXME: use AddNewEntry NameHt[name] = newEntry; KeyHt[gdcmDictEntry::TranslateToKey(group, element)] = newEntry; diff --git a/src/gdcmDictEntry.cxx b/src/gdcmDictEntry.cxx index 85449a08..1e135cb6 100644 --- a/src/gdcmDictEntry.cxx +++ b/src/gdcmDictEntry.cxx @@ -16,8 +16,8 @@ gdcmDictEntry::gdcmDictEntry(guint16 InGroup, guint16 InElement, - std::string InVr, std::string InFourth, - std::string InName) { + std::string InVr, std::string InFourth, + std::string InName) { group = InGroup; element = InElement; vr = InVr; diff --git a/src/gdcmDictSet.cxx b/src/gdcmDictSet.cxx index c13cf1df..79a417d5 100644 --- a/src/gdcmDictSet.cxx +++ b/src/gdcmDictSet.cxx @@ -15,7 +15,6 @@ #include // For getenv #include "gdcmUtil.h" #include "gdcmDictSet.h" -using namespace std; #define PUB_DICT_NAME "DicomV3Dict" #ifndef PUB_DICT_PATH @@ -30,8 +29,8 @@ using namespace std; * \sa gdcmDictSet::GetPubDictTagNamesByCategory * @return A list of all entries of the public dicom dictionnary. */ -list * gdcmDictSet::GetPubDictTagNames(void) { - list * Result = new list; +std::list * gdcmDictSet::GetPubDictTagNames(void) { + std::list * Result = new std::list; TagKeyHT entries = GetDefaultPubDict()->GetEntries(); for (TagKeyHT::iterator tag = entries.begin(); tag != entries.end(); ++tag){ @@ -55,8 +54,8 @@ list * gdcmDictSet::GetPubDictTagNames(void) { * corresponding values are lists of all the dictionnary entries * among that group. */ -map > * gdcmDictSet::GetPubDictTagNamesByCategory(void) { - map > * Result = new map >; +std::map > * gdcmDictSet::GetPubDictTagNamesByCategory(void) { + std::map > * Result = new map >; TagKeyHT entries = GetDefaultPubDict()->GetEntries(); for (TagKeyHT::iterator tag = entries.begin(); tag != entries.end(); ++tag){ @@ -72,8 +71,8 @@ map > * gdcmDictSet::GetPubDictTagNamesByCategory(void) { * the environnement variable is absent the path is defaulted * to "../Dicts/". */ -string gdcmDictSet::BuildDictPath(void) { - string ResultPath; +std::string gdcmDictSet::BuildDictPath(void) { + std::string ResultPath; const char* EnvPath = (char*)0; EnvPath = getenv("GDCM_DICT_PATH"); if (EnvPath && (strlen(EnvPath) != 0)) { @@ -94,7 +93,7 @@ string gdcmDictSet::BuildDictPath(void) { */ gdcmDictSet::gdcmDictSet(void) { DictPath = BuildDictPath(); - string PubDictFile = DictPath + PUB_DICT_FILENAME; + std::string PubDictFile = DictPath + PUB_DICT_FILENAME; Dicts[PUB_DICT_NAME] = new gdcmDict(PubDictFile); } @@ -116,7 +115,7 @@ gdcmDictSet::~gdcmDictSet() { * @param Name Symbolic name that be used as identifier of the newly * created dictionary. */ -void gdcmDictSet::LoadDictFromFile(string FileName, DictKey Name) { +void gdcmDictSet::LoadDictFromFile(std::string FileName, DictKey Name) { gdcmDict *NewDict = new gdcmDict(FileName); Dicts[Name] = NewDict; } diff --git a/src/gdcmElValSet.cxx b/src/gdcmElValSet.cxx index aaeb2c46..a6724537 100644 --- a/src/gdcmElValSet.cxx +++ b/src/gdcmElValSet.cxx @@ -13,7 +13,6 @@ #include "gdcmUtil.h" #include "gdcmElValSet.h" #include "gdcmTS.h" -using namespace std; gdcmElValSet::~gdcmElValSet() { for (TagElValueHT::iterator tag = tagHt.begin(); tag != tagHt.end(); ++tag) { @@ -52,7 +51,7 @@ void gdcmElValSet::Add(gdcmElValue * newElValue) { * @return */ int gdcmElValSet::CheckIfExistByNumber(guint16 Group, guint16 Elem ) { - string key = TranslateToKey(Group, Elem ); + std::string key = TranslateToKey(Group, Elem ); return (tagHt.count(key)); } @@ -65,7 +64,7 @@ void gdcmElValSet::Print(ostream & os) { size_t o; short int g, e; TSKey v; - string d2; + std::string d2; gdcmTS * ts = gdcmGlobal::GetTS(); for (TagElValueHT::iterator tag = tagHt.begin(); @@ -133,7 +132,7 @@ gdcmElValue* gdcmElValSet::GetElementByNumber(guint16 group, guint16 element) { * \brief * @return */ -gdcmElValue* gdcmElValSet::GetElementByName(string TagName) { +gdcmElValue* gdcmElValSet::GetElementByName(std::string TagName) { if ( ! NameHt.count(TagName)) return (gdcmElValue*)0; return NameHt.find(TagName)->second; @@ -146,7 +145,7 @@ gdcmElValue* gdcmElValSet::GetElementByName(string TagName) { * @param element * @return */ -string gdcmElValSet::GetElValueByNumber(guint16 group, guint16 element) { +std::string gdcmElValSet::GetElValueByNumber(guint16 group, guint16 element) { TagKey key = gdcmDictEntry::TranslateToKey(group, element); if ( ! tagHt.count(key)) return GDCM_UNFOUND; @@ -158,7 +157,7 @@ string gdcmElValSet::GetElValueByNumber(guint16 group, guint16 element) { * \brief * @return */ -string gdcmElValSet::GetElValueByName(string TagName) { +std::string gdcmElValSet::GetElValueByName(std::string TagName) { if ( ! NameHt.count(TagName)) return GDCM_UNFOUND; return NameHt.find(TagName)->second->GetValue(); @@ -172,13 +171,13 @@ string gdcmElValSet::GetElValueByName(string TagName) { * @param element * @return */ -int gdcmElValSet::SetElValueByNumber(string content, +int gdcmElValSet::SetElValueByNumber(std::string content, guint16 group, guint16 element) { TagKey key = gdcmDictEntry::TranslateToKey(group, element); if ( ! tagHt.count(key)) return 0; tagHt[key]->SetValue(content); - string vr = tagHt[key]->GetVR(); + std::string vr = tagHt[key]->GetVR(); guint32 lgr; if( (vr == "US") || (vr == "SS") ) @@ -198,11 +197,11 @@ int gdcmElValSet::SetElValueByNumber(string content, * @param TagName * @return */ -int gdcmElValSet::SetElValueByName(string content, string TagName) { +int gdcmElValSet::SetElValueByName(std::string content, std::string TagName) { if ( ! NameHt.count(TagName)) return 0; NameHt[TagName]->SetValue(content); - string vr = NameHt[TagName]->GetVR(); + std::string vr = NameHt[TagName]->GetVR(); guint32 lgr; if( (vr == "US") || (vr == "SS") ) @@ -276,7 +275,7 @@ int gdcmElValSet::SetElValueLengthByNumber(guint32 length, * @param TagName * @return */ -int gdcmElValSet::SetElValueLengthByName(guint32 length, string TagName) { +int gdcmElValSet::SetElValueLengthByName(guint32 length, std::string TagName) { if ( ! NameHt.count(TagName)) return 0; NameHt.find(TagName)->second->SetLength(length); @@ -291,11 +290,11 @@ int gdcmElValSet::SetElValueLengthByName(guint32 length, string TagName) { */ void gdcmElValSet::UpdateGroupLength(bool SkipSequence, FileType type) { guint16 gr, el; - string vr; + std::string vr; gdcmElValue *elem; char trash[10]; - string str_trash; + std::string str_trash; GroupKey key; GroupHT groupHt; // to hold the length of each group @@ -385,11 +384,11 @@ void gdcmElValSet::WriteElements(FileType type, FILE * _fp) { guint16 gr, el; guint32 lgr; const char * val; - string vr; + std::string vr; guint32 val_uint32; guint16 val_uint16; - vector tokens; + vector tokens; void *ptr; @@ -474,7 +473,7 @@ void gdcmElValSet::WriteElements(FileType type, FILE * _fp) { int gdcmElValSet::Write(FILE * _fp, FileType type) { if (type == ImplicitVR) { - string implicitVRTransfertSyntax = "1.2.840.10008.1.2"; + std::string implicitVRTransfertSyntax = "1.2.840.10008.1.2"; SetElValueByNumber(implicitVRTransfertSyntax, 0x0002, 0x0010); //FIXME Refer to standards on page 21, chapter 6.2 "Value representation": @@ -490,7 +489,7 @@ int gdcmElValSet::Write(FILE * _fp, FileType type) { // no way if (type == ExplicitVR) { - string explicitVRTransfertSyntax = "1.2.840.10008.1.2.1"; + std::string explicitVRTransfertSyntax = "1.2.840.10008.1.2.1"; SetElValueByNumber(explicitVRTransfertSyntax, 0x0002, 0x0010); // See above comment SetElValueLengthByNumber(20, 0x0002, 0x0010); diff --git a/src/gdcmException.cxx b/src/gdcmException.cxx index 53d40a73..e79d3225 100644 --- a/src/gdcmException.cxx +++ b/src/gdcmException.cxx @@ -13,10 +13,8 @@ #include #include -using namespace std; - -gdcmException::gdcmException(const string &f, const string& msg) throw() +gdcmException::gdcmException(const std::string &f, const std::string& msg) throw() #ifdef __GNUC__ try #endif @@ -49,24 +47,24 @@ void gdcmException::fatal(const char *from) throw() { } -string gdcmException::getName() const throw() { +std::string gdcmException::getName() const throw() { try { #ifdef __GNUC__ // GNU C++ compiler class name demangling unsigned int nested = 1, i, nb, offset; - string one; + std::string one; - string name; - string iname = typeid(*this).name(); + std::string name; + std::string iname = typeid(*this).name(); if(iname[0] == 'Q') { nested = iname[1] - '0'; - iname = string(iname, 2, std::string::npos); + iname = std::string(iname, 2, std::string::npos); } for(i = 0; i < nested; i++) { ::sscanf(iname.c_str(), "%u%n", &nb, &offset); - iname = string(iname, offset, std::string::npos); - name += string(iname, 0, nb); + iname = std::string(iname, offset, std::string::npos); + name += std::string(iname, 0, nb); if(i + 1 < nested) name += "::"; - iname = string(iname, nb, std::string::npos); + iname = std::string(iname, nb, std::string::npos); } return name; #else // no class name demangling @@ -75,7 +73,7 @@ string gdcmException::getName() const throw() { #endif } catch(...) { - fatal("Exception::getName(string &)"); + fatal("Exception::getName(std::string &)"); return ""; } } diff --git a/src/gdcmFile.cxx b/src/gdcmFile.cxx index 50eeeba7..a88fe481 100644 --- a/src/gdcmFile.cxx +++ b/src/gdcmFile.cxx @@ -15,7 +15,6 @@ #include "gdcmFile.h" #include "gdcmUtil.h" #include "iddcmjpeg.h" // for the 'LibIDO' Jpeg LossLess -using namespace std; #define str2num(str, typeNum) *((typeNum *)(str)) @@ -37,7 +36,7 @@ using namespace std; * @return */ -gdcmFile::gdcmFile(string & filename) +gdcmFile::gdcmFile(std::string & filename) :gdcmHeader(filename.c_str()) { SetPixelDataSizeFromHeader(); @@ -61,7 +60,7 @@ gdcmFile::gdcmFile(const char * filename) */ void gdcmFile::SetPixelDataSizeFromHeader(void) { int nb; - string str_nb; + std::string str_nb; str_nb=gdcmHeader::GetPubElValByNumber(0x0028,0x0100); if (str_nb == GDCM_UNFOUND ) { @@ -72,7 +71,7 @@ void gdcmFile::SetPixelDataSizeFromHeader(void) { } lgrTotale = GetXSize() * GetYSize() * GetZSize() * (nb/8)* GetSamplesPerPixel(); - string str_PhotometricInterpretation = gdcmHeader::GetPubElValByNumber(0x0028,0x0004); + std::string str_PhotometricInterpretation = gdcmHeader::GetPubElValByNumber(0x0028,0x0004); if ( str_PhotometricInterpretation == "PALETTE COLOR " || str_PhotometricInterpretation == "YBR_FULL") { // --> some more to be added !! lgrTotale*=3; @@ -100,13 +99,14 @@ size_t gdcmFile::GetImageDataSize(void) { /** * \ingroup gdcmFile * \brief Parse pixel data from disk and *prints* the result - * \ For multi-fragment Jpeg files checking purpose *only* + * \ 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) + * \ with Dicom Part 3, Annex A (PS 3.5-2003, page 58, page 85) * */ bool gdcmFile::ParsePixelData(void) { + if ( !OpenFile()) return false; @@ -121,12 +121,12 @@ bool gdcmFile::ParsePixelData(void) { IsExplicitVRBigEndianTransferSyntax() || IsDeflatedExplicitVRLittleEndianTransferSyntax() ) { - printf ("gdcmFile::ParsePixelData : non JPEG File\n"); + printf ("gdcmFile::ParsePixelData : non JPEG/RLE File\n"); return 0; } int nb; - string str_nb=gdcmHeader::GetPubElValByNumber(0x0028,0x0100); + std::string str_nb=gdcmHeader::GetPubElValByNumber(0x0028,0x0100); if (str_nb == GDCM_UNFOUND ) { nb = 16; } else { @@ -140,11 +140,18 @@ bool gdcmFile::ParsePixelData(void) { printf ("Checking the Dicom-Jpeg/RLE Pixels\n"); - // ------------------------------- for Parsing : Position on begining of Jpeg Pixels - guint16 ItemTagGr,ItemTagEl; - int ln; - long ftellRes; - char * destination = NULL; + guint16 ItemTagGr,ItemTagEl; + int ln; + long ftellRes; + char * destination = NULL; + + // ------------------------------- for Parsing : Position on begining of Jpeg/RLE Pixels + + if( !IsRLELossLessTransferSyntax()) { + + // JPEG Image + + cout << "JPEG image" << endl; 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 @@ -190,13 +197,14 @@ bool gdcmFile::ParsePixelData(void) { printf(" at %x : fragment length %d x(%08x)\n", ftellRes, ln,ln); - destination += taille * nBytes; // location in user's memory - - printf (" Destination will be x(%x) = %d \n", - destination,destination ); - + // 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 @@ -206,9 +214,114 @@ bool gdcmFile::ParsePixelData(void) { } printf ("at %x : ItemTag (should be fffe,e000 or e0dd): %04x,%04x\n", ftellRes,ItemTagGr,ItemTagEl ); - + } + + } else { + + // RLE Image + + cout << "RLE image" << endl; + long RleSegmentLength[15],fragmentLength; + guint32 nbRleSegments; + guint32 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(GetSwapCode()) { + ItemTagGr=SwapShort(ItemTagGr); + ItemTagEl=SwapShort(ItemTagEl); + } + printf ("at %x : ItemTag (should be fffe,e000): %04x,%04x\n", + ftellRes,ItemTagGr,ItemTagEl ); + // Item Length + ftellRes=ftell(fp); + fread(&ln,4,1,fp); + if(GetSwapCode()) + ln=SwapLong(ln); // Basic Offset Table Item Lentgh + printf("at %x : Basic Offset Table Item Lentgh (??) %d x(%08x)\n", + ftellRes,ln,ln); + if (ln != 0) { + // What is it used for ?? + char * BasicOffsetTableItemValue= (char *)malloc(ln+1); + fread(BasicOffsetTableItemValue,ln,1,fp); + guint32 a; + for (int i=0;i1) { + for(int k=1; k<=nbRleSegments-1; k++) { // skipping (not reading) RLE Segments + RleSegmentLength[k]=RleSegmentOffsetTable[k+1]-RleSegmentOffsetTable[k]; + ftellRes=ftell(fp); + printf (" Segment %d : Length = %d Start at %x\n", + k,RleSegmentLength[k], ftellRes); + fseek(fp,RleSegmentLength[k],SEEK_CUR); + } + } + RleSegmentLength[nbRleSegments] = fragmentLength - RleSegmentOffsetTable[nbRleSegments] ; + // TODO : Check the value + ftellRes=ftell(fp); + printf (" Segment %d : Length = %d Start at %x\n", + nbRleSegments,RleSegmentLength[nbRleSegments],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(GetSwapCode()) { + ItemTagGr=SwapShort(ItemTagGr); + ItemTagEl=SwapShort(ItemTagEl); + } + printf ("at %x : ItemTag (should be fffe,e000 or e0dd): %04x,%04x\n", + ftellRes,ItemTagGr,ItemTagEl ); } + } return 1; } @@ -230,7 +343,7 @@ bool gdcmFile::ReadPixelData(void* destination) { return false; } -// ------------------------------- Uncompressed File +// ------------------------- Uncompressed File if ( !IsDicomV3() || IsImplicitVRLittleEndianTransferSyntax() || @@ -248,10 +361,10 @@ bool gdcmFile::ReadPixelData(void* destination) { } } - // ----------------------------- JPEG Compressed File . + // ------------------------ Compressed File . int nb; - string str_nb=gdcmHeader::GetPubElValByNumber(0x0028,0x0100); + std::string str_nb=gdcmHeader::GetPubElValByNumber(0x0028,0x0100); if (str_nb == GDCM_UNFOUND ) { nb = 16; } else { @@ -308,17 +421,19 @@ bool gdcmFile::ReadPixelData(void* destination) { } _IdDcmJpegFree (jpg); return true; - } + } + // ------------------------------- RLE + + if (gdcmHeader::IsRLELossLessTransferSyntax()) { + int res = (bool)gdcm_read_RLE_file (destination); + return res; + } + // ------------------------------- JPEG Lossy : call to IJG 6b long fragmentBegining; // for ftell, fseek - - bool a=0, b=0; - - a = gdcmHeader::IsRLELossLessTransferSyntax(); - if (!a) - bool b = gdcmHeader::IsJPEG2000(); + bool b = gdcmHeader::IsJPEG2000(); bool res; guint16 ItemTagGr,ItemTagEl; @@ -359,9 +474,8 @@ bool gdcmFile::ReadPixelData(void* destination) { // FIXME : multi fragments fragmentBegining=ftell(fp); - if (a) - res = (bool)gdcm_read_RLE_file (destination); // Reading Fragment pixels - else if (b) + + if (b) res = (bool)gdcm_read_JPEG2000_file (destination); // Reading Fragment pixels else if (IsJPEGLossless()) { // ------------- call to LibIDO Jpeg for each Frame/fragment @@ -460,7 +574,7 @@ void * gdcmFile::GetImageData (void) { size_t gdcmFile::GetImageDataIntoVector (void* destination, size_t MaxSize) { int nb, nbu, highBit, signe; - string str_nbFrames, str_nb, str_nbu, str_highBit, str_signe; + std::string str_nbFrames, str_nb, str_nbu, str_highBit, str_signe; if ( lgrTotale > MaxSize ) { dbg.Verbose(0, "gdcmFile::GetImageDataIntoVector: pixel data bigger" @@ -534,7 +648,7 @@ size_t gdcmFile::GetImageDataIntoVector (void* destination, size_t MaxSize) { // Try to deal with the color // -------------------------- - string str_PhotometricInterpretation = gdcmHeader::GetPubElValByNumber(0x0028,0x0004); + std::string str_PhotometricInterpretation = gdcmHeader::GetPubElValByNumber(0x0028,0x0004); if ( (str_PhotometricInterpretation == "MONOCHROME1 ") || (str_PhotometricInterpretation == "MONOCHROME2 ") @@ -567,9 +681,9 @@ size_t gdcmFile::GetImageDataIntoVector (void* destination, size_t MaxSize) { memmove(destination,newDest,lgrTotale); free(newDest); // now, it's an RGB image - string spp = "3"; + std::string spp = "3"; gdcmHeader::SetPubElValByNumber(spp,0x0028,0x0002); - string rgb="RGB"; + std::string rgb="RGB"; gdcmHeader::SetPubElValByNumber(rgb,0x0028,0x0004); break; } @@ -604,9 +718,9 @@ size_t gdcmFile::GetImageDataIntoVector (void* destination, size_t MaxSize) { free(newDest); // now, it's an RGB image - string spp = "3"; + std::string spp = "3"; gdcmHeader::SetPubElValByNumber(spp,0x0028,0x0002); - string rgb="RGB"; + std::string rgb="RGB"; gdcmHeader::SetPubElValByNumber(rgb,0x0028,0x0004); } else { // need to make RGB Pixels (?) @@ -739,7 +853,7 @@ int gdcmFile::SetImageData(void * inData, size_t ExpectedSize) { */ void gdcmFile::SetImageDataSize(size_t ImageDataSize) { - string content1; + std::string content1; char car[20]; // Assumes ElValue (0x7fe0, 0x0010) exists ... sprintf(car,"%d",ImageDataSize); @@ -766,7 +880,7 @@ void gdcmFile::SetImageDataSize(size_t ImageDataSize) { * @return */ -int gdcmFile::WriteRawData (string fileName) { +int gdcmFile::WriteRawData (std::string fileName) { FILE * fp1; fp1 = fopen(fileName.c_str(),"wb"); if (fp1 == NULL) { @@ -790,7 +904,7 @@ int gdcmFile::WriteRawData (string fileName) { * @return int acts as a boolean */ -int gdcmFile::WriteDcmImplVR (string fileName) { +int gdcmFile::WriteDcmImplVR (std::string fileName) { return WriteBase(fileName, ImplicitVR); } @@ -803,7 +917,7 @@ int gdcmFile::WriteDcmImplVR (string fileName) { */ int gdcmFile::WriteDcmImplVR (const char* fileName) { - return WriteDcmImplVR (string (fileName)); + return WriteDcmImplVR (std::string (fileName)); } ///////////////////////////////////////////////////////////////// @@ -814,7 +928,7 @@ int gdcmFile::WriteDcmImplVR (const char* fileName) { * @return int acts as a boolean */ -int gdcmFile::WriteDcmExplVR (string fileName) { +int gdcmFile::WriteDcmExplVR (std::string fileName) { return WriteBase(fileName, ExplicitVR); } @@ -834,7 +948,7 @@ int gdcmFile::WriteDcmExplVR (string fileName) { * @return int acts as a boolean */ -int gdcmFile::WriteAcr (string fileName) { +int gdcmFile::WriteAcr (std::string fileName) { return WriteBase(fileName, ACR); } @@ -847,7 +961,7 @@ int gdcmFile::WriteAcr (string fileName) { * * @return int acts as a boolean */ -int gdcmFile::WriteBase (string FileName, FileType type) { +int gdcmFile::WriteBase (std::string FileName, FileType type) { FILE * fp1; fp1 = fopen(FileName.c_str(),"wb"); diff --git a/src/gdcmFile.h b/src/gdcmFile.h index f33eca6e..0336584f 100644 --- a/src/gdcmFile.h +++ b/src/gdcmFile.h @@ -25,9 +25,11 @@ private: int gdcm_read_JPEG_file (void * image_buffer); // For JPEG 8 Bits int gdcm_read_JPEG_file12 (void * image_buffer); // For JPEG 12 Bits int gdcm_read_JPEG2000_file (void * image_buffer); // For JPEG 2000 (TODO) - int gdcm_read_RLE_file (void * image_buffer); // For Run Length Encoding (TODO) - - + +// For Run Length Encoding (TOCHECK) + int gdcm_read_RLE_file (void * image_buffer); + + protected: int WriteBase(std::string FileName, FileType type); public: diff --git a/src/gdcmHeader.cxx b/src/gdcmHeader.cxx index 50d4800e..f8aaef2a 100644 --- a/src/gdcmHeader.cxx +++ b/src/gdcmHeader.cxx @@ -1,4 +1,4 @@ -// $Header: /cvs/public/gdcm/src/Attic/gdcmHeader.cxx,v 1.84 2003/09/18 09:32:15 regrain Exp $ +// $Header: /cvs/public/gdcm/src/Attic/gdcmHeader.cxx,v 1.85 2003/09/24 11:37:10 jpr Exp $ //This is needed when compiling in debug mode #ifdef _MSC_VER @@ -24,13 +24,8 @@ #include #include "gdcmUtil.h" #include "gdcmHeader.h" -using namespace std; #include "gdcmTS.h" - -// TODO : remove DEBUG -#define DEBUG 0 - // Refer to gdcmHeader::CheckSwap() #define HEADER_LENGTH_TO_READ 256 // Refer to gdcmHeader::SetMaxSizeLoadElementValue() @@ -318,7 +313,7 @@ void gdcmHeader::FindVR( gdcmElValue *ElVal) { return; char VR[3]; - string vr; + std::string vr; int lgrLue; char msg[100]; // for sprintf. Sorry @@ -334,7 +329,7 @@ void gdcmHeader::FindVR( gdcmElValue *ElVal) { lgrLue=fread (&VR, (size_t)2,(size_t)1, fp); VR[2]=0; - vr = string(VR); + vr = std::string(VR); // Assume we are reading a falsely explicit VR file i.e. we reached // a tag where we expect reading a VR but are in fact we read the @@ -406,7 +401,7 @@ bool gdcmHeader::IsImplicitVRLittleEndianTransferSyntax(void) { if ( !Element ) return false; LoadElementValueSafe(Element); - string Transfer = Element->GetValue(); + std::string Transfer = Element->GetValue(); if ( Transfer == "1.2.840.10008.1.2" ) return true; return false; @@ -424,7 +419,7 @@ bool gdcmHeader::IsExplicitVRLittleEndianTransferSyntax(void) { if ( !Element ) return false; LoadElementValueSafe(Element); - string Transfer = Element->GetValue(); + std::string Transfer = Element->GetValue(); if ( Transfer == "1.2.840.10008.1.2.1" ) return true; return false; @@ -442,7 +437,7 @@ bool gdcmHeader::IsDeflatedExplicitVRLittleEndianTransferSyntax(void) { if ( !Element ) return false; LoadElementValueSafe(Element); - string Transfer = Element->GetValue(); + std::string Transfer = Element->GetValue(); if ( Transfer == "1.2.840.10008.1.2.1.99" ) return true; return false; @@ -460,7 +455,7 @@ bool gdcmHeader::IsExplicitVRBigEndianTransferSyntax(void) { if ( !Element ) return false; LoadElementValueSafe(Element); - string Transfer = Element->GetValue(); + std::string Transfer = Element->GetValue(); if ( Transfer == "1.2.840.10008.1.2.2" ) //1.2.2 ??? A verifier ! return true; return false; @@ -478,7 +473,7 @@ bool gdcmHeader::IsJPEGBaseLineProcess1TransferSyntax(void) { if ( !Element ) return false; LoadElementValueSafe(Element); - string Transfer = Element->GetValue(); + std::string Transfer = Element->GetValue(); if ( Transfer == "1.2.840.10008.1.2.4.50" ) return true; return false; @@ -515,7 +510,7 @@ bool gdcmHeader::IsJPEGExtendedProcess2_4TransferSyntax(void) { if ( !Element ) return false; LoadElementValueSafe(Element); - string Transfer = Element->GetValue(); + std::string Transfer = Element->GetValue(); if ( Transfer == "1.2.840.10008.1.2.4.51" ) return true; return false; @@ -533,7 +528,7 @@ bool gdcmHeader::IsJPEGExtendedProcess3_5TransferSyntax(void) { if ( !Element ) return false; LoadElementValueSafe(Element); - string Transfer = Element->GetValue(); + std::string Transfer = Element->GetValue(); if ( Transfer == "1.2.840.10008.1.2.4.52" ) return true; return false; @@ -552,7 +547,7 @@ bool gdcmHeader::IsJPEGSpectralSelectionProcess6_8TransferSyntax(void) { if ( !Element ) return false; LoadElementValueSafe(Element); - string Transfer = Element->GetValue(); + std::string Transfer = Element->GetValue(); if ( Transfer == "1.2.840.10008.1.2.4.53" ) return true; return false; @@ -571,7 +566,7 @@ bool gdcmHeader::IsRLELossLessTransferSyntax(void) { if ( !Element ) return false; LoadElementValueSafe(Element); - string Transfer = Element->GetValue(); + std::string Transfer = Element->GetValue(); if ( Transfer == "1.2.840.10008.1.2.5" ) return true; return false; @@ -590,7 +585,7 @@ bool gdcmHeader::IsJPEG2000(void) { if ( !Element ) return false; LoadElementValueSafe(Element); - string Transfer = Element->GetValue(); + std::string Transfer = Element->GetValue(); if ( (Transfer == "1.2.840.10008.1.2.4.90") || (Transfer == "1.2.840.10008.1.2.4.91") ) return true; @@ -682,7 +677,7 @@ void gdcmHeader::FixFoundLength(gdcmElValue * ElVal, guint32 FoundLength) { void gdcmHeader::FindLength (gdcmElValue * ElVal) { guint16 element = ElVal->GetElement(); guint16 group = ElVal->GetGroup(); - string vr = ElVal->GetVR(); + std::string vr = ElVal->GetVR(); guint16 length16; if( (element == 0x0010) && (group == 0x7fe0) ) { dbg.SetDebug(0); @@ -866,7 +861,7 @@ guint16 gdcmHeader::SwapShort(guint16 a) { void gdcmHeader::LoadElementValue(gdcmElValue * ElVal) { size_t item_read; guint16 group = ElVal->GetGroup(); - string vr = ElVal->GetVR(); + std::string vr = ElVal->GetVR(); guint32 length = ElVal->GetLength(); bool SkipLoad = false; @@ -1088,7 +1083,7 @@ gdcmElValue* gdcmHeader::NewElValueByNumber(guint16 Group, guint16 Elem) { * @param Elem * \return integer acts as a boolean */ -int gdcmHeader::ReplaceOrCreateByNumber(string Value, guint16 Group, guint16 Elem ) { +int gdcmHeader::ReplaceOrCreateByNumber(std::string Value, guint16 Group, guint16 Elem ) { // TODO : FIXME JPRx // curieux, non ? @@ -1117,7 +1112,7 @@ int gdcmHeader::ReplaceOrCreateByNumber(char* Value, guint16 Group, guint16 Elem gdcmElValue* nvElValue=NewElValueByNumber(Group, Elem); PubElValSet.Add(nvElValue); - string v = Value; + std::string v = Value; PubElValSet.SetElValueByNumber(v, Group, Elem); return(1); } @@ -1134,7 +1129,7 @@ int gdcmHeader::ReplaceOrCreateByNumber(char* Value, guint16 Group, guint16 Elem int gdcmHeader::ReplaceIfExistByNumber(char* Value, guint16 Group, guint16 Elem ) { gdcmElValue* elValue = PubElValSet.GetElementByNumber(Group, Elem); - string v = Value; + std::string v = Value; PubElValSet.SetElValueByNumber(v, Group, Elem); return 1; } @@ -1160,7 +1155,7 @@ int gdcmHeader::CheckIfExistByNumber(guint16 Group, guint16 Elem ) { * a default one when absent. * @param Name Name of the underlying DictEntry */ -gdcmElValue* gdcmHeader::NewElValueByName(string Name) { +gdcmElValue* gdcmHeader::NewElValueByName(std::string Name) { gdcmDictEntry * NewTag = GetDictEntryByName(Name); if (!NewTag) @@ -1189,8 +1184,6 @@ gdcmElValue * gdcmHeader::ReadNextElement(void) { n = ReadInt16(); if ( (g==0x7fe0) && (n==0x0010) ) - if (DEBUG) - printf("in gdcmHeader::ReadNextElement try to read 7fe0 0010 \n"); if (errno == 1) // We reached the EOF (or an error occured) and header parsing @@ -1202,13 +1195,10 @@ gdcmElValue * gdcmHeader::ReadNextElement(void) { FindLength(NewElVal); if (errno == 1) { // Call it quits - if (DEBUG) printf("in gdcmHeader::ReadNextElement : g %04x n %04x errno %d\n",g, n, errno); return (gdcmElValue *)0; } NewElVal->SetOffset(ftell(fp)); if ( (g==0x7fe0) && (n==0x0010) ) - if (DEBUG) - printf("sortie de gdcmHeader::ReadNextElement 7fe0 0010 \n"); return NewElVal; } @@ -1222,7 +1212,7 @@ gdcmElValue * gdcmHeader::ReadNextElement(void) { bool gdcmHeader::IsAnInteger(gdcmElValue * ElVal) { guint16 group = ElVal->GetGroup(); guint16 element = ElVal->GetElement(); - string vr = ElVal->GetVR(); + std::string vr = ElVal->GetVR(); guint32 length = ElVal->GetLength(); // When we have some semantics on the element we just read, and if we @@ -1232,9 +1222,6 @@ bool gdcmHeader::IsAnInteger(gdcmElValue * ElVal) { if (length == 4) return true; else { - if (DEBUG) printf("Erroneous Group Length element length (%04x , %04x) : %d\n", - group, element,length); - dbg.Error("gdcmHeader::IsAnInteger", "Erroneous Group Length element length."); } @@ -1259,7 +1246,7 @@ size_t gdcmHeader::GetPixelOffset(void) { // When the "Image Location" is absent we default to group 0x7fe0. guint16 grPixel; guint16 numPixel; - string ImageLocation = GetPubElValByName("Image Location"); + std::string ImageLocation = GetPubElValByName("Image Location"); if ( ImageLocation == GDCM_UNFOUND ) { grPixel = 0x7fe0; } else { @@ -1317,7 +1304,7 @@ gdcmDictEntry * gdcmHeader::GetDictEntryByNumber(guint16 group, * @param Name name of the searched DictEntry * @return Corresponding DictEntry when it exists, NULL otherwise. */ -gdcmDictEntry * gdcmHeader::GetDictEntryByName(string Name) { +gdcmDictEntry * gdcmHeader::GetDictEntryByName(std::string Name) { gdcmDictEntry * found = (gdcmDictEntry*)0; if (!RefPubDict && !RefShaDict) { dbg.Verbose(0, "gdcmHeader::GetDictEntry", @@ -1345,7 +1332,7 @@ gdcmDictEntry * gdcmHeader::GetDictEntryByName(string Name) { * @return Corresponding element value when it exists, and the string * GDCM_UNFOUND ("gdcm::Unfound") otherwise. */ -string gdcmHeader::GetPubElValByNumber(guint16 group, guint16 element) { +std::string gdcmHeader::GetPubElValByNumber(guint16 group, guint16 element) { return PubElValSet.GetElValueByNumber(group, element); } @@ -1363,7 +1350,7 @@ string gdcmHeader::GetPubElValByNumber(guint16 group, guint16 element) { * @return Corresponding element value representation when it exists, * and the string GDCM_UNFOUND ("gdcm::Unfound") otherwise. */ -string gdcmHeader::GetPubElValRepByNumber(guint16 group, guint16 element) { +std::string gdcmHeader::GetPubElValRepByNumber(guint16 group, guint16 element) { gdcmElValue* elem = PubElValSet.GetElementByNumber(group, element); if ( !elem ) return GDCM_UNFOUND; @@ -1378,7 +1365,7 @@ string gdcmHeader::GetPubElValRepByNumber(guint16 group, guint16 element) { * @return Corresponding element value when it exists, and the string * GDCM_UNFOUND ("gdcm::Unfound") otherwise. */ -string gdcmHeader::GetPubElValByName(string TagName) { +std::string gdcmHeader::GetPubElValByName(std::string TagName) { return PubElValSet.GetElValueByName(TagName); } @@ -1395,7 +1382,7 @@ string gdcmHeader::GetPubElValByName(string TagName) { * @return Corresponding element value representation when it exists, * and the string GDCM_UNFOUND ("gdcm::Unfound") otherwise. */ -string gdcmHeader::GetPubElValRepByName(string TagName) { +std::string gdcmHeader::GetPubElValRepByName(std::string TagName) { gdcmElValue* elem = PubElValSet.GetElementByName(TagName); if ( !elem ) return GDCM_UNFOUND; @@ -1411,7 +1398,7 @@ string gdcmHeader::GetPubElValRepByName(string TagName) { * @return Corresponding element value representation when it exists, * and the string GDCM_UNFOUND ("gdcm::Unfound") otherwise. */ -string gdcmHeader::GetShaElValByNumber(guint16 group, guint16 element) { +std::string gdcmHeader::GetShaElValByNumber(guint16 group, guint16 element) { return ShaElValSet.GetElValueByNumber(group, element); } @@ -1429,7 +1416,7 @@ string gdcmHeader::GetShaElValByNumber(guint16 group, guint16 element) { * @return Corresponding element value representation when it exists, * and the string GDCM_UNFOUND ("gdcm::Unfound") otherwise. */ -string gdcmHeader::GetShaElValRepByNumber(guint16 group, guint16 element) { +std::string gdcmHeader::GetShaElValRepByNumber(guint16 group, guint16 element) { gdcmElValue* elem = ShaElValSet.GetElementByNumber(group, element); if ( !elem ) return GDCM_UNFOUND; @@ -1444,7 +1431,7 @@ string gdcmHeader::GetShaElValRepByNumber(guint16 group, guint16 element) { * @return Corresponding element value when it exists, and the string * GDCM_UNFOUND ("gdcm::Unfound") otherwise. */ -string gdcmHeader::GetShaElValByName(string TagName) { +std::string gdcmHeader::GetShaElValByName(std::string TagName) { return ShaElValSet.GetElValueByName(TagName); } @@ -1461,7 +1448,7 @@ string gdcmHeader::GetShaElValByName(string TagName) { * @return Corresponding element value representation when it exists, * and the string GDCM_UNFOUND ("gdcm::Unfound") otherwise. */ -string gdcmHeader::GetShaElValRepByName(string TagName) { +std::string gdcmHeader::GetShaElValRepByName(std::string TagName) { gdcmElValue* elem = ShaElValSet.GetElementByName(TagName); if ( !elem ) return GDCM_UNFOUND; @@ -1478,8 +1465,8 @@ string gdcmHeader::GetShaElValRepByName(string TagName) { * @return Corresponding element value representation when it exists, * and the string GDCM_UNFOUND ("gdcm::Unfound") otherwise. */ -string gdcmHeader::GetElValByNumber(guint16 group, guint16 element) { - string pub = GetPubElValByNumber(group, element); +std::string gdcmHeader::GetElValByNumber(guint16 group, guint16 element) { + std::string pub = GetPubElValByNumber(group, element); if (pub.length()) return pub; return GetShaElValByNumber(group, element); @@ -1500,8 +1487,8 @@ string gdcmHeader::GetElValByNumber(guint16 group, guint16 element) { * @return Corresponding element value representation when it exists, * and the string GDCM_UNFOUND ("gdcm::Unfound") otherwise. */ -string gdcmHeader::GetElValRepByNumber(guint16 group, guint16 element) { - string pub = GetPubElValRepByNumber(group, element); +std::string gdcmHeader::GetElValRepByNumber(guint16 group, guint16 element) { + std::string pub = GetPubElValRepByNumber(group, element); if (pub.length()) return pub; return GetShaElValRepByNumber(group, element); @@ -1516,8 +1503,8 @@ string gdcmHeader::GetElValRepByNumber(guint16 group, guint16 element) { * @return Corresponding element value when it exists, * and the string GDCM_UNFOUND ("gdcm::Unfound") otherwise. */ -string gdcmHeader::GetElValByName(string TagName) { - string pub = GetPubElValByName(TagName); +std::string gdcmHeader::GetElValByName(std::string TagName) { + std::string pub = GetPubElValByName(TagName); if (pub.length()) return pub; return GetShaElValByName(TagName); @@ -1537,8 +1524,8 @@ string gdcmHeader::GetElValByName(string TagName) { * @return Corresponding element value representation when it exists, * and the string GDCM_UNFOUND ("gdcm::Unfound") otherwise. */ -string gdcmHeader::GetElValRepByName(string TagName) { - string pub = GetPubElValRepByName(TagName); +std::string gdcmHeader::GetElValRepByName(std::string TagName) { + std::string pub = GetPubElValRepByName(TagName); if (pub.length()) return pub; return GetShaElValRepByName(TagName); @@ -1553,7 +1540,7 @@ string gdcmHeader::GetElValRepByName(string TagName) { * @param group group of the ElVal to modify * @param element element of the ElVal to modify */ -int gdcmHeader::SetPubElValByNumber(string content, guint16 group, +int gdcmHeader::SetPubElValByNumber(std::string content, guint16 group, guint16 element) //TODO : homogeneiser les noms : SetPubElValByNumber qui appelle PubElValSet.SetElValueByNumber @@ -1570,7 +1557,7 @@ int gdcmHeader::SetPubElValByNumber(string content, guint16 group, * @param content new value to substitute with * @param TagName name of the tag to be modified */ -int gdcmHeader::SetPubElValByName(string content, string TagName) { +int gdcmHeader::SetPubElValByName(std::string content, std::string TagName) { return ( PubElValSet.SetElValueByName (content, TagName) ); } @@ -1601,7 +1588,7 @@ int gdcmHeader::SetPubElValLengthByNumber(guint32 length, guint16 group, * @param element element of the ElVal to modify * @return 1 on success, 0 otherwise. */ -int gdcmHeader::SetShaElValByNumber(string content, +int gdcmHeader::SetShaElValByNumber(std::string content, guint16 group, guint16 element) { return ( ShaElValSet.SetElValueByNumber (content, group, element) ); } @@ -1613,7 +1600,7 @@ int gdcmHeader::SetShaElValByNumber(string content, * @param content new value to substitute with * @param ShadowTagName name of the tag to be modified */ -int gdcmHeader::SetShaElValByName(string content, string ShadowTagName) { +int gdcmHeader::SetShaElValByName(std::string content, std::string ShadowTagName) { return ( ShaElValSet.SetElValueByName (content, ShadowTagName) ); } @@ -1667,7 +1654,7 @@ bool gdcmHeader::IsReadable(void) { * @param VR The Value Representation to be given to this new tag. * @ return The newly hand crafted Element Value. */ -gdcmElValue* gdcmHeader::NewManualElValToPubDict(string NewTagName, string VR) { +gdcmElValue* gdcmHeader::NewManualElValToPubDict(std::string NewTagName, std::string VR) { gdcmElValue* NewElVal = (gdcmElValue*)0; guint32 StuffGroup = 0xffff; // Group to be stuffed with additional info guint32 FreeElem = 0; @@ -1700,7 +1687,7 @@ void gdcmHeader::LoadElements(void) { rewind(fp); // Load 'non string' values - string PhotometricInterpretation = GetPubElValByNumber(0x0028,0x0004); + std::string PhotometricInterpretation = GetPubElValByNumber(0x0028,0x0004); if( PhotometricInterpretation == "PALETTE COLOR " ){ LoadElementVoidArea(0x0028,0x1200); // gray LUT LoadElementVoidArea(0x0028,0x1201); // R LUT @@ -1718,7 +1705,7 @@ void gdcmHeader::LoadElements(void) { // if recognition code tells us we deal with a LibIDO image // we switch lineNumber and columnNumber // - string RecCode; + std::string RecCode; RecCode = GetPubElValByNumber(0x0008, 0x0010); if (RecCode == "ACRNEMA_LIBIDO_1.1" || RecCode == "CANRME_AILIBOD1_1." ) { @@ -1846,7 +1833,7 @@ void * gdcmHeader::LoadElementVoidArea(guint16 Group, guint16 Elem) { int gdcmHeader::GetXSize(void) { // We cannot check for "Columns" because the "Columns" tag is present // both in IMG (0028,0011) and OLY (6000,0011) sections of the dictionary. - string StrSize = GetPubElValByNumber(0x0028,0x0011); + std::string StrSize = GetPubElValByNumber(0x0028,0x0011); if (StrSize == GDCM_UNFOUND) return 0; return atoi(StrSize.c_str()); @@ -1861,7 +1848,7 @@ int gdcmHeader::GetXSize(void) { int gdcmHeader::GetYSize(void) { // We cannot check for "Rows" because the "Rows" tag is present // both in IMG (0028,0010) and OLY (6000,0010) sections of the dictionary. - string StrSize = GetPubElValByNumber(0x0028,0x0010); + std::string StrSize = GetPubElValByNumber(0x0028,0x0010); if (StrSize != GDCM_UNFOUND) return atoi(StrSize.c_str()); if ( IsDicomV3() ) @@ -1884,7 +1871,7 @@ int gdcmHeader::GetYSize(void) { int gdcmHeader::GetZSize(void) { // Both in DicomV3 and ACR/Nema the consider the "Number of Frames" // as the third dimension. - string StrSize = GetPubElValByNumber(0x0028,0x0008); + std::string StrSize = GetPubElValByNumber(0x0028,0x0008); if (StrSize != GDCM_UNFOUND) return atoi(StrSize.c_str()); @@ -1905,7 +1892,7 @@ int gdcmHeader::GetZSize(void) { * @return The encountered number of Bits Stored, 0 by default. */ int gdcmHeader::GetBitsStored(void) { - string StrSize = GetPubElValByNumber(0x0028,0x0101); + std::string StrSize = GetPubElValByNumber(0x0028,0x0101); if (StrSize == GDCM_UNFOUND) return 1; return atoi(StrSize.c_str()); @@ -1920,7 +1907,7 @@ int gdcmHeader::GetBitsStored(void) { * @return The encountered number of Samples Per Pixel, 1 by default. */ int gdcmHeader::GetSamplesPerPixel(void) { - string StrSize = GetPubElValByNumber(0x0028,0x0002); + std::string StrSize = GetPubElValByNumber(0x0028,0x0002); if (StrSize == GDCM_UNFOUND) return 1; // Well, it's supposed to be mandatory ... return atoi(StrSize.c_str()); @@ -1934,7 +1921,7 @@ int gdcmHeader::GetSamplesPerPixel(void) { * @return The encountered Planar Configuration, 0 by default. */ int gdcmHeader::GetPlanarConfiguration(void) { - string StrSize = GetPubElValByNumber(0x0028,0x0006); + std::string StrSize = GetPubElValByNumber(0x0028,0x0006); if (StrSize == GDCM_UNFOUND) return 0; return atoi(StrSize.c_str()); @@ -1947,7 +1934,7 @@ int gdcmHeader::GetPlanarConfiguration(void) { * */ int gdcmHeader::GetPixelSize(void) { - string PixelType = GetPixelType(); + std::string PixelType = GetPixelType(); if (PixelType == "8U" || PixelType == "8S") return 1; if (PixelType == "16U" || PixelType == "16S") @@ -1971,26 +1958,26 @@ int gdcmHeader::GetPixelSize(void) { * \warning 12 bit images appear as 16 bit. * @return */ -string gdcmHeader::GetPixelType(void) { - string BitsAlloc; +std::string gdcmHeader::GetPixelType(void) { + std::string BitsAlloc; BitsAlloc = GetElValByName("Bits Allocated"); if (BitsAlloc == GDCM_UNFOUND) { dbg.Verbose(0, "gdcmHeader::GetPixelType: unfound Bits Allocated"); - BitsAlloc = string("16"); + BitsAlloc = std::string("16"); } if (BitsAlloc == "12") - BitsAlloc = string("16"); + BitsAlloc = std::string("16"); - string Signed; + std::string Signed; Signed = GetElValByName("Pixel Representation"); if (Signed == GDCM_UNFOUND) { dbg.Verbose(0, "gdcmHeader::GetPixelType: unfound Pixel Representation"); - BitsAlloc = string("0"); + BitsAlloc = std::string("0"); } if (Signed == "0") - Signed = string("U"); + Signed = std::string("U"); else - Signed = string("S"); + Signed = std::string("S"); return( BitsAlloc + Signed); } @@ -2001,15 +1988,15 @@ string gdcmHeader::GetPixelType(void) { * \ else 1. * @return Transfert Syntax Name (as oposite to Transfert Syntax UID) */ -string gdcmHeader::GetTransferSyntaxName(void) { - string TransfertSyntax = GetPubElValByNumber(0x0002,0x0010); +std::string gdcmHeader::GetTransferSyntaxName(void) { + std::string TransfertSyntax = GetPubElValByNumber(0x0002,0x0010); if (TransfertSyntax == GDCM_UNFOUND) { dbg.Verbose(0, "gdcmHeader::GetTransferSyntaxName: unfound Transfert Syntax (0002,0010)"); return "Uncompressed ACR-NEMA"; } // we do it only when we need it gdcmTS * ts = gdcmGlobal::GetTS(); - string tsName=ts->GetValue(TransfertSyntax); + std::string tsName=ts->GetValue(TransfertSyntax); //delete ts; // Seg Fault when deleted ?! return tsName; } @@ -2025,18 +2012,18 @@ string gdcmHeader::GetTransferSyntaxName(void) { */ int gdcmHeader::GetLUTLength(void) { - vector tokens; + vector tokens; int LutLength; //int LutDepth; //int LutNbits; // Just hope Lookup Table Desc-Red = Lookup Table Desc-Red = Lookup Table Desc-Blue - string LutDescriptionR = GetPubElValByNumber(0x0028,0x1101); + std::string LutDescriptionR = GetPubElValByNumber(0x0028,0x1101); if (LutDescriptionR == GDCM_UNFOUND) return 0; - string LutDescriptionG = GetPubElValByNumber(0x0028,0x1102); + std::string LutDescriptionG = GetPubElValByNumber(0x0028,0x1102); if (LutDescriptionG == GDCM_UNFOUND) return 0; - string LutDescriptionB = GetPubElValByNumber(0x0028,0x1103); + std::string LutDescriptionB = GetPubElValByNumber(0x0028,0x1103); if (LutDescriptionB == GDCM_UNFOUND) return 0; if( (LutDescriptionR != LutDescriptionG) || (LutDescriptionR != LutDescriptionB) ) { @@ -2062,13 +2049,13 @@ int gdcmHeader::GetLUTLength(void) { */ int gdcmHeader::GetLUTNbits(void) { - vector tokens; + vector tokens; //int LutLength; //int LutDepth; int LutNbits; // Just hope Lookup Table Desc-Red = Lookup Table Desc-Red = Lookup Table Desc-Blue // Consistency already checked in GetLUTLength - string LutDescription = GetPubElValByNumber(0x0028,0x1101); + std::string LutDescription = GetPubElValByNumber(0x0028,0x1101); if (LutDescription == GDCM_UNFOUND) return 0; tokens.erase(tokens.begin(),tokens.end()); // clean any previous value diff --git a/src/gdcmHeaderHelper.cxx b/src/gdcmHeaderHelper.cxx index 05ade1c5..392dd186 100644 --- a/src/gdcmHeaderHelper.cxx +++ b/src/gdcmHeaderHelper.cxx @@ -1,4 +1,4 @@ -// $Header: /cvs/public/gdcm/src/Attic/gdcmHeaderHelper.cxx,v 1.5 2003/09/18 09:32:15 regrain Exp $ +// $Header: /cvs/public/gdcm/src/Attic/gdcmHeaderHelper.cxx,v 1.6 2003/09/24 11:37:10 jpr Exp $ //This is needed when compiling in debug mode #ifdef _MSC_VER @@ -16,7 +16,6 @@ #include #include #include //for bzero -using namespace std; //directory manipulation (os indep). //cygwin ???? -> _WIN32 ?? diff --git a/src/gdcmHeaderIdo.cxx b/src/gdcmHeaderIdo.cxx index cc905fdc..71a1d123 100644 --- a/src/gdcmHeaderIdo.cxx +++ b/src/gdcmHeaderIdo.cxx @@ -12,7 +12,6 @@ #include "gdcmIdo.h" #include "gdcmUtil.h" -using namespace std; gdcmHeaderIdo::gdcmHeaderIdo (char* InFilename) : gdcmHeader(InFilename) diff --git a/src/gdcmRLE.cxx b/src/gdcmRLE.cxx index e927c298..f119cdbc 100644 --- a/src/gdcmRLE.cxx +++ b/src/gdcmRLE.cxx @@ -10,42 +10,185 @@ #include #include "gdcmFile.h" -#include "jpeg/libijg8/cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ -#include "jpeg/libijg8/jversion.h" /* for version message */ #include /* to declare isprint() */ -/* Create the add-on message string table. */ -#define JMESSAGE(code,string) string , +#define str2num(str, typeNum) *((typeNum *)(str)) -static const char * const cdjpeg_message_table[] = { -#include "jpeg/libijg8/cderror.h" - NULL -}; - - /* -------------------------------------------------------------------- */ - // - // RLE LossLess Files - // - /* -------------------------------------------------------------------- */ +static int _gdcm_read_RLE_fragment (char ** image_buffer, + long lengthToDecode, + long uncompressedSegmentSize, + FILE* fp); +// static because nothing but gdcm_read_RLE_file may call it -int -gdcmFile::gdcm_read_RLE_file (void * image_buffer) { +// ------------------------------------------------------------------------------------ +/** + * \ingroup gdcmFile + * \brief Reads a 'Run Length Encoded' Dicom encapsulated file + * @param destination Address (in caller's memory space) at which the + * pixel data should be copied + * @return int acts as a Boolean + */ +// This is a debug version. +// Forget the printf as they will be removed +// as soon as the last Heuristics are checked +int +gdcmFile::gdcm_read_RLE_file (void * image_buffer) { + char * im = (char *)image_buffer; + cout << "RLE image" << endl; + + long RleSegmentLength[15],fragmentLength,uncompressedSegmentSize;; + long ftellRes, ln; + guint32 nbRleSegments; + guint32 RleSegmentOffsetTable[15]; + guint16 ItemTagGr,ItemTagEl; + uncompressedSegmentSize=GetXSize()*GetYSize(); + printf("uncompressedSegmentSize %d\n",uncompressedSegmentSize); + 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(GetSwapCode()) { + ItemTagGr=SwapShort(ItemTagGr); + ItemTagEl=SwapShort(ItemTagEl); + } + printf ("at %x : ItemTag (should be fffe,e000): %04x,%04x\n", + ftellRes,ItemTagGr,ItemTagEl ); + // Item Length + ftellRes=ftell(fp); + fread(&ln,4,1,fp); + if(GetSwapCode()) + ln=SwapLong(ln); // Basic Offset Table Item Lentgh + printf("at %x : Basic Offset Table Item Lentgh (??) %d x(%08x)\n", + ftellRes,ln,ln); + if (ln != 0) { + // What is it used for ?? + char * BasicOffsetTableItemValue= (char *)malloc(ln+1); + fread(BasicOffsetTableItemValue,ln,1,fp); + guint32 a; + for (int i=0;i1) { + for(int k=1; k<=nbRleSegments-1; k++) { // reading RLE Segments + RleSegmentLength[k]=RleSegmentOffsetTable[k+1]-RleSegmentOffsetTable[k]; + ftellRes=ftell(fp); + printf (" Segment %d : Length = %d Start at %x\n", + k,RleSegmentLength[k], ftellRes); + _gdcm_read_RLE_fragment (&im, RleSegmentLength[k],uncompressedSegmentSize,fp); + //fseek(fp,RleSegmentLength[k],SEEK_CUR); + + } + } + RleSegmentLength[nbRleSegments] = fragmentLength - RleSegmentOffsetTable[nbRleSegments]; // + 4; + // 4 : bytes for number of RLE Segments (WHY ???); + // TODO : Check the value + ftellRes=ftell(fp); + printf (" Segment %d : Length = %d Start at %x\n", + nbRleSegments,RleSegmentLength[nbRleSegments],ftellRes); + _gdcm_read_RLE_fragment (&im, RleSegmentLength[nbRleSegments],uncompressedSegmentSize, fp); + //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(GetSwapCode()) { + ItemTagGr=SwapShort(ItemTagGr); + ItemTagEl=SwapShort(ItemTagEl); + } + printf ("at %x : ItemTag (should be fffe,e000 or e0dd): %04x,%04x\n", + ftellRes,ItemTagGr,ItemTagEl ); + } + return (1); +} + /* -------------------------------------------------------------------- */ + // + // RLE LossLess Fragment + // + /* -------------------------------------------------------------------- */ - - - - - - - - - - - printf("Sorry RLE LossLess File not yet taken into account\n"); - return 0; + // static because nothing but gdcm_read_RLE_file can call it + // DO NOT doxygen ! + +static int +_gdcm_read_RLE_fragment (char ** areaToRead, + long lengthToDecode, + long uncompressedSegmentSize, + FILE* fp) { + long ftellRes; + int count; + long numberOfOutputBytes=0; + char n, car; + ftellRes =ftell(fp); + printf ("Fragment begin : %x lengthToDecode %d\n",ftellRes,lengthToDecode); + + while(numberOfOutputBytes= 0 && count <= 127) { + fread(*areaToRead,(count+1)*sizeof(char),1,fp); + *areaToRead+=count+1; + numberOfOutputBytes+=count+1; + } else { + if (count <= -1 && count >= -127) { + fread(&car,sizeof(char),1,fp); + for(int i=0; i<-count+1; i++) { + (*areaToRead)[i]=car; + } + *areaToRead+=(-count+1); + numberOfOutputBytes+=(-count+1); + } + } + // if count = 128 output nothing (See : PS 3.5-2003 Page 86) + } + return 1; } diff --git a/src/gdcmUtil.cxx b/src/gdcmUtil.cxx index 6f31287e..d0a98063 100644 --- a/src/gdcmUtil.cxx +++ b/src/gdcmUtil.cxx @@ -1,4 +1,4 @@ -// $Header: /cvs/public/gdcm/src/gdcmUtil.cxx,v 1.18 2003/09/22 08:28:43 regrain Exp $ +// $Header: /cvs/public/gdcm/src/gdcmUtil.cxx,v 1.19 2003/09/24 11:37:10 jpr Exp $ //This is needed when compiling in debug mode #ifdef _MSC_VER @@ -14,7 +14,6 @@ #include // For isspace #include #include "gdcmUtil.h" -using namespace std; // Library globals. gdcmDebug dbg;