]> Creatis software - gdcm.git/blobdiff - src/gdcmFile.cxx
* src/gdcmFile.[h|cxx] : bug fix for ACR-LIBIDO files when writting the file
[gdcm.git] / src / gdcmFile.cxx
index 4921affdf3820fe2858911157c0295bcd9f98eaa..035e25c3d5935b736cd172d9be5fe46558427c41 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmFile.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/11/25 13:12:02 $
-  Version:   $Revision: 1.164 $
+  Date:      $Date: 2004/11/30 14:17:52 $
+  Version:   $Revision: 1.167 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -406,11 +406,20 @@ bool File::WriteBase (std::string const & fileName, FileType type)
          SetWriteFileTypeToExplicitVR();
          break;
       case ACR:
-         SetWriteFileTypeToACR();
-         break;
       case ACR_LIBIDO:
-         SetWriteFileTypeToACRLibido();
+         SetWriteFileTypeToACR();
          break;
+      default:
+         SetWriteFileTypeToExplicitVR();
+   }
+
+   if( type == ACR_LIBIDO )
+   {
+      SetWriteToLibido();
+   }
+   else
+   {
+      SetWriteToNoLibido();
    }
   
    switch(WriteMode)
@@ -459,6 +468,7 @@ bool File::WriteBase (std::string const & fileName, FileType type)
 
    RestoreWrite();
    RestoreWriteFileType();
+   RestoreWriteOfLibido();
 
    return check;
 }
@@ -481,12 +491,12 @@ bool File::CheckWriteIntegrity()
          numberBitsAllocated = 16;
       }
 
-      int decSize = HeaderInternal->GetXSize()
+      size_t decSize = HeaderInternal->GetXSize()
                     * HeaderInternal->GetYSize() 
                     * HeaderInternal->GetZSize()
                     * ( numberBitsAllocated / 8 )
                     * HeaderInternal->GetSamplesPerPixel();
-      int rgbSize = decSize;
+      size_t rgbSize = decSize;
       if( HeaderInternal->HasLUT() )
          rgbSize = decSize * 3;
 
@@ -670,15 +680,10 @@ void File::SetWriteFileTypeToACR()
    Archive->Push(0x0002,0x0010);
 }
 
-void File::SetWriteFileTypeToACRLibido()
-{
-   SetWriteFileTypeToACR();
-}
-
 void File::SetWriteFileTypeToExplicitVR()
 {
-   std::string ts = 
-      Util::DicomString( TransferSyntaxStrings[ExplicitVRLittleEndian] );
+   std::string ts = Util::DicomString( 
+      Document::GetTransferSyntaxValue(ExplicitVRLittleEndian).c_str() );
 
    ValEntry* tss = CopyValEntry(0x0002,0x0010);
    tss->SetValue(ts);
@@ -689,8 +694,8 @@ void File::SetWriteFileTypeToExplicitVR()
 
 void File::SetWriteFileTypeToImplicitVR()
 {
-   std::string ts = 
-      Util::DicomString( TransferSyntaxStrings[ImplicitVRLittleEndian] );
+   std::string ts = Util::DicomString(
+      Document::GetTransferSyntaxValue(ImplicitVRLittleEndian).c_str() );
 
    ValEntry* tss = CopyValEntry(0x0002,0x0010);
    tss->SetValue(ts);
@@ -723,12 +728,33 @@ void File::SetWriteToLibido()
       Archive->Push(newRow);
       Archive->Push(newCol);
    }
+
+   ValEntry *libidoCode = CopyValEntry(0x0008,0x0010);
+   libidoCode->SetValue("ACRNEMA_LIBIDO_1.1");
+   libidoCode->SetLength(10);
+   Archive->Push(libidoCode);
 }
 
-void File::RestoreWriteFromLibido()
+void File::SetWriteToNoLibido()
+{
+   ValEntry *recCode = dynamic_cast<ValEntry *>(HeaderInternal->GetDocEntryByNumber(0x0008,0x0010));
+   if( recCode )
+   {
+      if( recCode->GetValue() == "ACRNEMA_LIBIDO_1.1" )
+      {
+         ValEntry *libidoCode = CopyValEntry(0x0008,0x0010);
+         libidoCode->SetValue("");
+         libidoCode->SetLength(0);
+         Archive->Push(libidoCode);
+      }
+   }
+}
+
+void File::RestoreWriteOfLibido()
 {
    Archive->Restore(0x0028,0x0010);
    Archive->Restore(0x0028,0x0011);
+   Archive->Restore(0x0008,0x0010);
 }
 
 ValEntry* File::CopyValEntry(uint16_t group,uint16_t element)
@@ -770,23 +796,6 @@ BinEntry* File::CopyBinEntry(uint16_t group,uint16_t element)
 
 //-----------------------------------------------------------------------------
 // Private
-/**
- * \brief Set the pixel datas in the good entry of the Header
- */
-void File::SetPixelData(uint8_t* data)
-{
-   GetHeader()->SetEntryByNumber( GDCM_BINLOADED,
-      GetHeader()->GetGrPixel(), GetHeader()->GetNumPixel());
-
-   // Will be 7fe0, 0010 in standard case
-   DocEntry* currentEntry = GetHeader()->GetDocEntryByNumber(GetHeader()->GetGrPixel(), GetHeader()->GetNumPixel());
-   if ( currentEntry )
-   {
-      if ( BinEntry* binEntry = dynamic_cast<BinEntry *>(currentEntry) )
-         // Flag is to false because datas are kept in the gdcmPixelConvert
-         binEntry->SetBinArea( data, false );
-   }
-}
 
 //-----------------------------------------------------------------------------
 } // end namespace gdcm