X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmParser.cxx;h=9a2f98143eb823756b79099c77cbb143cb05cb82;hb=0574f31372f78bf8399e42ee04bd0010e684c440;hp=b2aeb4e32183325f90e4e4e23ee05286405ea483;hpb=2ad968707c3eea27dff9d8dd5f4caf9f7b6c4d6e;p=gdcm.git diff --git a/src/gdcmParser.cxx b/src/gdcmParser.cxx index b2aeb4e3..9a2f9814 100644 --- a/src/gdcmParser.cxx +++ b/src/gdcmParser.cxx @@ -97,7 +97,6 @@ gdcmParser::gdcmParser(const char *InFilename, bool ignore_shadow) { enableSequences=enable_sequences; ignoreShadow =ignore_shadow; - cout << "chou" << endl; SetMaxSizeLoadEntry(MAX_SIZE_LOAD_ELEMENT_VALUE); filename = InFilename; @@ -121,7 +120,6 @@ gdcmParser::gdcmParser(const char *InFilename, */ gdcmParser::gdcmParser(bool exception_on_error) { enableSequences=0; - cout << "chou" << endl; SetMaxSizeLoadEntry(MAX_SIZE_LOAD_ELEMENT_VALUE); Initialise(); @@ -1009,6 +1007,7 @@ void gdcmParser::WriteEntries(FILE *_fp,FileType type) { guint16 gr, el; guint32 lgr; + std::string value; const char * val; std::string vr; guint32 val_uint32; @@ -1025,7 +1024,7 @@ void gdcmParser::WriteEntries(FILE *_fp,FileType type) // TODO : find a trick (in STL?) to do it, at low cost ! void *ptr; - + // TODO (?) tester les echecs en ecriture (apres chaque fwrite) int compte =0; @@ -1033,11 +1032,19 @@ void gdcmParser::WriteEntries(FILE *_fp,FileType type) tag2 != listEntries.end(); ++tag2) { - gr = (*tag2)->GetGroup(); - el = (*tag2)->GetElement(); - lgr = (*tag2)->GetReadLength(); - val = (*tag2)->GetValue().c_str(); - vr = (*tag2)->GetVR(); + // === Deal with the length + // -------------------- + if(((*tag2)->GetLength())%2==1) + { + (*tag2)->SetValue((*tag2)->GetValue()+"\0"); + (*tag2)->SetLength((*tag2)->GetLength()+1); + } + + gr = (*tag2)->GetGroup(); + el = (*tag2)->GetElement(); + lgr = (*tag2)->GetReadLength(); + val = (*tag2)->GetValue().c_str(); + vr = (*tag2)->GetVR(); voidArea = (*tag2)->GetVoidArea(); if ( type == ACR ) @@ -1053,38 +1060,39 @@ void gdcmParser::WriteEntries(FILE *_fp,FileType type) fwrite ( &gr,(size_t)2 ,(size_t)1 ,_fp); //group fwrite ( &el,(size_t)2 ,(size_t)1 ,_fp); //element - // === Deal with the length - // -------------------- - // if ( (type == ExplicitVR) && (gr <= 0x0002) ) // ?!? < 2 if ( (type == ExplicitVR) || (type == DICOMDIR) ) { // EXPLICIT VR guint16 z=0, shortLgr; - if (vr == "unkn") { // Unknown was 'written' + if (vr == "unkn") + { // Unknown was 'written' shortLgr=lgr; fwrite ( &shortLgr,(size_t)2 ,(size_t)1 ,_fp); fwrite ( &z, (size_t)2 ,(size_t)1 ,_fp); - } else { - if (gr != 0xfffe) { // NO value for 'delimiters' - if (vr == "unkn") // Unknown was 'written' - fwrite(&z,(size_t)2 ,(size_t)1 ,_fp); - else - fwrite (vr.c_str(),(size_t)2 ,(size_t)1 ,_fp); + } + else + { + if (gr != 0xfffe) + { // NO value for 'delimiters' + if (vr == "unkn") // Unknown was 'written' + fwrite(&z,(size_t)2 ,(size_t)1 ,_fp); + else + fwrite (vr.c_str(),(size_t)2 ,(size_t)1 ,_fp); } - + if ( (vr == "OB") || (vr == "OW") || (vr == "SQ") || gr == 0xfffe) { if (gr != 0xfffe) - fwrite ( &z, (size_t)2 ,(size_t)1 ,_fp); - fwrite ( &lgr,(size_t)4 ,(size_t)1 ,_fp); + fwrite ( &z, (size_t)2 ,(size_t)1 ,_fp); + fwrite ( &lgr,(size_t)4 ,(size_t)1 ,_fp); } else { shortLgr=lgr; fwrite ( &shortLgr,(size_t)2 ,(size_t)1 ,_fp); } - } + } } else // IMPLICIT VR { @@ -1096,9 +1104,10 @@ void gdcmParser::WriteEntries(FILE *_fp,FileType type) if (vr == "SQ") continue; // no "value" to write for the SEQuences if (gr == 0xfffe)continue; - if (voidArea != NULL) { // there is a 'non string' LUT, overlay, etc + if (voidArea != NULL) + { // there is a 'non string' LUT, overlay, etc fwrite ( voidArea,(size_t)lgr ,(size_t)1 ,_fp); // Elem value - continue; + continue; } if (vr == "US" || vr == "SS") @@ -1134,7 +1143,7 @@ void gdcmParser::WriteEntries(FILE *_fp,FileType type) if ((gr == GrPixel) && (el == NumPixel) ) { compte++; - if (compte == countGrPixel) // we passed *all* the GrPixel,NumPixel + if (compte == countGrPixel) // we passed *all* the GrPixel,NumPixel break; } fwrite ( val,(size_t)lgr ,(size_t)1 ,_fp); // Elem value