-}
-
-/**
- * \brief Constructor used when we want to generate dicom files from scratch
- */
-File::File():
- Document()
-{
- RLEInfo = new RLEFramesInfo;
- JPEGInfo = new JPEGFragmentsInfo;
- InitializeDefaultFile();
-}
-
-/**
- * \brief Canonical destructor.
- */
-File::~File ()
-{
- if( RLEInfo )
- delete RLEInfo;
- if( JPEGInfo )
- delete JPEGInfo;
-}
-
-//-----------------------------------------------------------------------------
-// Public
-/**
- * \brief Performs some consistency checking on various 'File related'
- * (as opposed to 'DicomDir related') entries
- * then writes in a file all the (Dicom Elements) included the Pixels
- * @param fileName file name to write to
- * @param filetype Type of the File to be written
- * (ACR, ExplicitVR, ImplicitVR)
- */
-bool File::Write(std::string fileName, FileType filetype)
-{
- std::ofstream *fp = new std::ofstream(fileName.c_str(),
- std::ios::out | std::ios::binary);
- if (*fp == NULL)
- {
- gdcmVerboseMacro("Failed to open (write) File: " << fileName.c_str());
- return false;
- }
-
- // Entry : 0002|0000 = group length -> recalculated
- ValEntry *e0002 = GetValEntry(0x0002,0x0000);
- if( e0002 )
- {
- std::ostringstream sLen;
- sLen << ComputeGroup0002Length(filetype);
- e0002->SetValue(sLen.str());
- }
-
- // Bits Allocated
- if ( GetEntryValue(0x0028,0x0100) == "12")
- {
- SetValEntry("16", 0x0028,0x0100);
- }
-
- int i_lgPix = GetEntryLength(GrPixel, NumPixel);
- if (i_lgPix != -2)
- {
- // no (GrPixel, NumPixel) element
- std::string s_lgPix = Util::Format("%d", i_lgPix+12);
- s_lgPix = Util::DicomString( s_lgPix.c_str() );
- InsertValEntry(s_lgPix,GrPixel, 0x0000);
- }
-
- // FIXME : should be nice if we could move it to File
- // (or in future gdcmPixelData class)
-
- // Drop Palette Color, if necessary
- if ( GetEntryValue(0x0028,0x0002).c_str()[0] == '3' )
- {
- // if SamplesPerPixel = 3, sure we don't need any LUT !
- // Drop 0028|1101, 0028|1102, 0028|1103
- // Drop 0028|1201, 0028|1202, 0028|1203
-
- DocEntry *e = GetDocEntry(0x0028,0x01101);
- if (e)
- {
- RemoveEntryNoDestroy(e);
- }
- e = GetDocEntry(0x0028,0x1102);
- if (e)
- {
- RemoveEntryNoDestroy(e);
- }
- e = GetDocEntry(0x0028,0x1103);
- if (e)
- {
- RemoveEntryNoDestroy(e);
- }
- e = GetDocEntry(0x0028,0x01201);
- if (e)
- {
- RemoveEntryNoDestroy(e);
- }
- e = GetDocEntry(0x0028,0x1202);
- if (e)
- {
- RemoveEntryNoDestroy(e);
- }
- e = GetDocEntry(0x0028,0x1203);
- if (e)
- {
- RemoveEntryNoDestroy(e);
- }
- }
-
-/*
-#ifdef GDCM_WORDS_BIGENDIAN
- // Super Super hack that will make gdcm a BOMB ! but should
- // Fix temporarily the dashboard
- BinEntry *b = GetBinEntry(GrPixel,NumPixel);
- if ( GetPixelSize() == 16 )
- {
- uint16_t *im16 = (uint16_t *)b->GetBinArea();
- int lgr = b->GetLength();
- for( int i = 0; i < lgr / 2; i++ )
- {
- im16[i]= (im16[i] >> 8) | (im16[i] << 8 );
- }
- }
-#endif //GDCM_WORDS_BIGENDIAN
-*/
-
- Document::WriteContent(fp, filetype);
-
-/*
-#ifdef GDCM_WORDS_BIGENDIAN
- // Flip back the pixel ... I told you this is a hack
- if ( GetPixelSize() == 16 )
- {
- uint16_t *im16 = (uint16_t*)b->GetBinArea();
- int lgr = b->GetLength();
- for( int i = 0; i < lgr / 2; i++ )
- {
- im16[i]= (im16[i] >> 8) | (im16[i] << 8 );
- }
- }
-#endif //GDCM_WORDS_BIGENDIAN
-*/
-
- fp->close();
- delete fp;
-