]> Creatis software - gdcm.git/blobdiff - src/gdcmFile.cxx
BUG: Need to lean c++ (bug in g++ ?)
[gdcm.git] / src / gdcmFile.cxx
index 6e25ca5e6b2852cdf9122306d78bca2c4860b03a..8221bd388d21676f8b136f67a19089f411c128cf 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmFile.cxx,v $
   Language:  C++
-  Date:      $Date: 2004/06/28 14:12:03 $
-  Version:   $Revision: 1.112 $
+  Date:      $Date: 2004/07/16 15:18:05 $
+  Version:   $Revision: 1.116 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -244,7 +244,7 @@ void *gdcmFile::GetImageData()
  *     
  * @param   destination Address (in caller's memory space) at which the
  *          pixel data should be copied
- * @param   MaxSize Maximum number of bytes to be copied. When MaxSize
+ * @param   maxSize Maximum number of bytes to be copied. When MaxSize
  *          is not sufficient to hold the pixel data the copy is not
  *          executed (i.e. no partial copy).
  * @return  On success, the number of bytes actually copied. Zero on
@@ -263,7 +263,7 @@ size_t gdcmFile::GetImageDataIntoVector (void* destination, size_t maxSize)
    // from Lut R + Lut G + Lut B
    uint8_t *newDest = new uint8_t[ImageDataSize];
    uint8_t *a       = (uint8_t *)destination;
-   uint8_t *lutRGBA =  Header->GetLUTRGBA();
+   uint8_t *lutRGBA = Header->GetLUTRGBA();
 
    if ( lutRGBA )
    {
@@ -288,7 +288,7 @@ size_t gdcmFile::GetImageDataIntoVector (void* destination, size_t maxSize)
 
    std::string spp = "3";        // Samples Per Pixel
    Header->SetEntryByNumber(spp,0x0028,0x0002);
-   std::string rgb= "RGB ";      // Photometric Interpretation
+   std::string rgb = "RGB ";      // Photometric Interpretation
    Header->SetEntryByNumber(rgb,0x0028,0x0004);
    std::string planConfig = "0"; // Planar Configuration
    Header->SetEntryByNumber(planConfig,0x0028,0x0006);
@@ -330,7 +330,6 @@ void * gdcmFile::GetImageDataRaw ()
    if ( Header->HasLUT() )
    {
       /// \todo Let gdcmHeader user a chance to get the right value
-      // ImageDataSize /= 3;  //dangerous
       imgDataSize = ImageDataSizeRaw;
    }
 
@@ -366,7 +365,7 @@ void * gdcmFile::GetImageDataRaw ()
  *     
  * @param   destination Address (in caller's memory space) at which the
  *          pixel data should be copied
- * @param   MaxSize Maximum number of bytes to be copied. When MaxSize
+ * @param   maxSize Maximum number of bytes to be copied. When MaxSize
  *          is not sufficient to hold the pixel data the copy is not
  *          executed (i.e. no partial copy).
  * @return  On success, the number of bytes actually copied. Zero on
@@ -473,9 +472,9 @@ size_t gdcmFile::GetImageDataIntoVectorRaw (void *destination, size_t maxSize)
       }
       else if ( nb == 32 )
       {
-         guint32 mask = 0xffffffff;
+         uint32_t mask = 0xffffffff;
          mask         = mask >> (nb - nbu);
-         guint32 *deb = (guint32 *)destination;
+         uint32_t *deb = (uint32_t *)destination;
          for(int i = 0; i<l; i++)
          {
             *deb = (*deb >> (nbu - highBit - 1)) & mask;
@@ -635,7 +634,7 @@ size_t gdcmFile::GetImageDataIntoVectorRaw (void *destination, size_t maxSize)
  *        'volume'Pixels are presented as C-like 3D arrays : lane per plane 
  * \warning user is kindly requested NOT TO 'free' the Pixel area
  * @param inData user supplied pixel area
- * @param ExpectedSize total image size, in Bytes
+ * @param expectedSize total image size, in Bytes
  *
  * @return boolean
  */
@@ -661,14 +660,13 @@ bool gdcmFile::SetImageData(void *inData, size_t expectedSize)
 
 bool gdcmFile::WriteRawData(std::string const & fileName)
 {
-   FILE *fp1;
-   fp1 = fopen(fileName.c_str(), "wb");
+   FILE *fp1 = fopen(fileName.c_str(), "wb");
    if (fp1 == NULL)
    {
       printf("Fail to open (write) file [%s] \n", fileName.c_str());
       return false;
    }
-   fwrite (PixelData,ImageDataSize, 1, fp1);
+   fwrite (PixelData, ImageDataSize, 1, fp1);
    fclose (fp1);
 
    return true;
@@ -736,14 +734,12 @@ bool gdcmFile::WriteAcr (std::string const & fileName)
  */
 bool gdcmFile::WriteBase (std::string const & fileName, FileType type)
 {
-   FILE *fp1;
-
    if ( PixelRead == -1 && type != gdcmExplicitVR)
    {
       return false;
    }
 
-   fp1 = fopen(fileName.c_str(), "wb");
+   FILE *fp1 = fopen(fileName.c_str(), "wb");
    if (fp1 == NULL)
    {
       printf("Failed to open (write) File [%s] \n", fileName.c_str());
@@ -781,45 +777,24 @@ bool gdcmFile::WriteBase (std::string const & fileName, FileType type)
       Header->SetEntryByNumber(rows   ,  0x0028, 0x0011);
    }
    // ----------------- End of Special Patch ----------------
-   
-   /// \todo get the grPixel, numPixel values (for some ACR-NEMA images only)
-   
+      
    uint16_t grPixel  = Header->GetGrPixel();
    uint16_t numPixel = Header->GetNumPixel();;
-    
-   // Update Pixel Data Length
-   // the *last* of the (GrPixel, NumPixel), if many.
           
-   TagKey key = gdcmDictEntry::TranslateToKey(grPixel, numPixel); 
-   TagDocEntryHT::iterator p2;
-   gdcmDocEntry* PixelElement;
-   
-   IterHT it = Header->GetEntry().equal_range(key); // get a pair of iterators first-last synonym   
-
-   if ( Header->GetEntry().count(key) == 1 ) // only the first is significant
-   {
-      p2 = it.first; // iterator on the first (unique) synonym
-   }
-   else
-   {
-      p2 = it.second;// iterator on the last synonym
-   }
-   
-   PixelElement = p2->second;        // H Table target column (2-nd col)
-  // PixelElement->SetPrintLevel(2);
-  // PixelElement->Print();      
+   gdcmDocEntry* PixelElement = 
+      GetHeader()->GetDocEntryByNumber(grPixel, numPixel);  
  
    if ( PixelRead == 1 )
    {
+      // we read pixel 'as is' (no tranformation LUT -> RGB)
       PixelElement->SetLength( ImageDataSizeRaw );
    }
    else if ( PixelRead == 0 )
    {
+      // we tranformed GrayLevel pixels + LUT into RGB Pixel
       PixelElement->SetLength( ImageDataSize );
    }
-   
-   //PixelElement->SetPrintLevel(2);
-   //PixelElement->Print();    
    Header->Write(fp1, type);
 
    // --------------------------------------------------------------
@@ -1000,7 +975,7 @@ bool gdcmFile::ReadPixelData(void *destination)
    // ---------------------- Run Length Encoding
    if ( Header->IsRLELossLessTransferSyntax() )
    {
-      bool res = (bool)gdcm_read_RLE_file (fp,destination);
+      bool res = gdcm_read_RLE_file (fp,destination);
       Header->CloseFile();
       return res; 
    }