]> Creatis software - gdcm.git/blobdiff - src/gdcmFileHelper.cxx
Forget to commit this one.
[gdcm.git] / src / gdcmFileHelper.cxx
index 9005f118feabe1612282f3c4fdf41397838d90d1..87c6e895b241c2ca9adc06b227d7d13e03752969 100644 (file)
@@ -4,8 +4,8 @@
   Module:    $RCSfile: gdcmFileHelper.cxx,v $
   Language:  C++
 
-  Date:      $Date: 2007/08/28 09:29:26 $
-  Version:   $Revision: 1.123 $
+  Date:      $Date: 2007/08/31 14:11:00 $
+  Version:   $Revision: 1.126 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -97,7 +97,6 @@ fh->Write(newFileName);      // overwrites the file, if any
 
 
 
-
 These lines will be moved to the document-to-be 'Developer's Guide'
 
 WriteMode : WMODE_RAW / WMODE_RGB
@@ -764,9 +763,9 @@ bool FileHelper::Write(std::string const &fileName)
          // was :
          //PixelWriteConverter->SetCompressJPEGUserData(
          //   inData, expectedSize, FileInternal);
- PixelWriteConverter->SetCompressJPEGUserData(
-    PixelWriteConverter->GetUserData(),
-    PixelWriteConverter->GetUserDataSize(),FileInternal);
        PixelWriteConverter->SetCompressJPEGUserData(
+                 PixelWriteConverter->GetUserData(),
+                 PixelWriteConverter->GetUserDataSize(),FileInternal);
          break;
 
       case JPEG2000:
@@ -778,7 +777,6 @@ bool FileHelper::Write(std::string const &fileName)
             PixelWriteConverter->GetUserData(),
             PixelWriteConverter->GetUserDataSize(),
             FileInternal);
          break;
    }
 
@@ -850,14 +848,14 @@ bool FileHelper::CheckWriteIntegrity()
       int numberBitsAllocated = FileInternal->GetBitsAllocated();
       if ( numberBitsAllocated == 0 || numberBitsAllocated == 12 )
       {
-         gdcmWarningMacro( "numberBitsAllocated changed from " 
-                          << numberBitsAllocated << " to 16 " 
+         gdcmWarningMacro( "numberBitsAllocated changed from "
+                          << numberBitsAllocated << " to 16 "
                           << " for consistency purpose" );
          numberBitsAllocated = 16;
       }
 
       size_t decSize = FileInternal->GetXSize()
-                     * FileInternal->GetYSize() 
+                     * FileInternal->GetYSize()
                      * FileInternal->GetZSize()
                      * FileInternal->GetTSize()     
                      * FileInternal->GetSamplesPerPixel()
@@ -866,23 +864,24 @@ bool FileHelper::CheckWriteIntegrity()
       if ( FileInternal->HasLUT() )
          rgbSize = decSize * 3;
 
+      size_t userDataSize = PixelWriteConverter->GetUserDataSize();
       switch(WriteMode)
       {
          case WMODE_RAW :
-            if ( decSize!=PixelWriteConverter->GetUserDataSize() )
+            if ( abs(decSize-userDataSize)>1) // ignore padding zero
             {
                gdcmWarningMacro( "Data size (Raw) is incorrect. Should be " 
                            << decSize << " / Found :" 
-                           << PixelWriteConverter->GetUserDataSize() );
+                           << userDataSize );
                return false;
             }
             break;
          case WMODE_RGB :
-            if ( rgbSize!=PixelWriteConverter->GetUserDataSize() )
+            if ( abs(rgbSize-userDataSize)>1) // ignore padding zero
             {
                gdcmWarningMacro( "Data size (RGB) is incorrect. Should be " 
-                          << decSize << " / Found " 
-                          << PixelWriteConverter->GetUserDataSize() );
+                          << rgbSize << " / Found " 
+                          << userDataSize );
                return false;
             }
             break;
@@ -1316,6 +1315,7 @@ We have to deal with 4 *very* different cases :
 -4) user modified/added some tags *without processing* the pixels (anonymization...)
    UNMODIFIED_PIXELS_IMAGE
 -Probabely some more to be added.
+ --> Set it with FileHelper::SetContentType(int);
  
 gdcm::FileHelper::CheckMandatoryElements() deals automatically with these cases.
 
@@ -1508,45 +1508,39 @@ void FileHelper::CheckMandatoryElements()
 
    if ( ContentType != USER_OWN_IMAGE) // when it's not a user made image
    { 
-
-      gdcmDebugMacro( "USER_OWN_IMAGE (1)");
-   // If 'SOP Class UID' exists ('true DICOM' image)
+   // If 'SOP Class UID' and 'SOP Instance UID' exist ('true DICOM' image)
    // we create the 'Source Image Sequence' SeqEntry
    // to hold informations about the Source Image
   
       DataEntry *e_0008_0016 = FileInternal->GetDataEntry(0x0008, 0x0016);
-      if ( e_0008_0016 )
+      DataEntry *e_0008_0018 = FileInternal->GetDataEntry(0x0008, 0x0018);
+      if ( e_0008_0016 && e_0008_0018)
       {
       // Create 'Source Image Sequence' SeqEntry
-//     SeqEntry *sis = SeqEntry::New (
-//            Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0008, 0x2112) );
       SeqEntry *sis = SeqEntry::New (0x0008, 0x2112);
       SQItem *sqi = SQItem::New(1);
-      // (we assume 'SOP Instance UID' exists too) 
-      // create 'Referenced SOP Class UID'
-//     DataEntry *e_0008_1150 = DataEntry::New(
-//            Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0008, 0x1150) );
+      
+      // create 'Referenced SOP Class UID' from 'SOP Class UID'
+
       DataEntry *e_0008_1150 = DataEntry::New(0x0008, 0x1150, "UI");
       e_0008_1150->SetString( e_0008_0016->GetString());
       sqi->AddEntry(e_0008_1150);
       e_0008_1150->Delete();
       
-      // create 'Referenced SOP Instance UID'
+      // create 'Referenced SOP Instance UID' from 'SOP Instance UID'
       DataEntry *e_0008_0018 = FileInternal->GetDataEntry(0x0008, 0x0018);
-//      DataEntry *e_0008_1155 = DataEntry::New(
-//            Global::GetDicts()->GetDefaultPubDict()->GetEntry(0x0008, 0x1155) );
-      DataEntry *e_0008_1155 = DataEntry::New(0x0008, 0x1155, "UI");
+         
+      DataEntry *e_0008_1155 = DataEntry::New(0x0008, 0x1155, "UI"); 
       e_0008_1155->SetString( e_0008_0018->GetString());
       sqi->AddEntry(e_0008_1155);
       e_0008_1155->Delete();
-
+      
       sis->AddSQItem(sqi,1);
       sqi->Delete();
 
       // temporarily replaces any previous 'Source Image Sequence' 
       Archive->Push(sis);
       sis->Delete();
       // FIXME : is 'Image Type' *really* depending on the presence of 'SOP Class UID'?
        if ( ContentType == FILTERED_IMAGE)      
       // the user *knows* he just modified the pixels