]> Creatis software - gdcm.git/blobdiff - src/gdcmFileHelper.cxx
Forgot to update this one
[gdcm.git] / src / gdcmFileHelper.cxx
index 9005f118feabe1612282f3c4fdf41397838d90d1..fd2a84cc2eb03b22ae610caa5d33570ad1146c4a 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/09/18 10:50:37 $
+  Version:   $Revision: 1.130 $
                                                                                 
   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
@@ -601,7 +600,7 @@ size_t FileHelper::GetRawDataSize()
 }
 
 /**
- * \brief Access to the underlying \ref PixelReadConverter RGBA LUT
+ * \brief Access to the underlying PixelReadConverter RGBA LUT
  */
 uint8_t* FileHelper::GetLutRGBA()
 {
@@ -611,7 +610,7 @@ uint8_t* FileHelper::GetLutRGBA()
 }
 
 /**
- * \brief Access to the underlying \ref PixelReadConverter RGBA LUT Item Number
+ * \brief Access to the underlying PixelReadConverter RGBA LUT Item Number
  */
 int FileHelper::GetLutItemNumber()
 {
@@ -619,7 +618,7 @@ int FileHelper::GetLutItemNumber()
 }
 
 /**
- * \brief Access to the underlying \ref PixelReadConverter RGBA LUT Item Size
+ * \brief Access to the underlying PixelReadConverter RGBA LUT Item Size
  */
 int FileHelper::GetLutItemSize()
 {
@@ -729,7 +728,6 @@ bool FileHelper::Write(std::string const &fileName)
    CheckMandatoryElements(); //called once, here !
    
    bool flag = false;
-   DocEntry *e;   
    switch(WriteType)
    {
       case ImplicitVR:
@@ -764,13 +762,13 @@ 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:
-         /// \TODO Maybe we should consider doing the compression here !
+         /// \todo Maybe we should consider doing the compression here !
          // PixelWriteConverter->SetCompressJPEG2000UserData(inData, expectedSize, FileInternal);
 
          SetWriteFileTypeToJPEG2000();
@@ -778,7 +776,6 @@ bool FileHelper::Write(std::string const &fileName)
             PixelWriteConverter->GetUserData(),
             PixelWriteConverter->GetUserDataSize(),
             FileInternal);
          break;
    }
 
@@ -850,14 +847,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 +863,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((long)(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((long)(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 +1314,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.
 
@@ -1356,7 +1355,7 @@ If 'SOP Class UID' exists in the native image  ('true DICOM' image)
     --> 'Referenced SOP Instance UID' (0x0008, 0x1155)
          whose value is the original 'SOP Class UID'
 
-3) TODO : find a trick to allow user to pass to the writter the list of the Dicom images 
+3) TO DO : find a trick to allow user to pass to the writter the list of the Dicom images 
           or the Series, (or the Study ?) he used to created his image 
           (MIP, MPR, cartography image, ...)
            These info should be stored (?)
@@ -1508,45 +1507,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
@@ -1983,6 +1976,8 @@ void FileHelper::Initialize()
    PixelReadConverter  = new PixelReadConvert;
    PixelWriteConverter = new PixelWriteConvert;
    Archive = new DocEntryArchive( FileInternal );
+   
+   KeepOverlays = false;
 }
 
 /**