X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmFile.cxx;h=666a8e96f5fdd0245ddfb14ec1d15cb82937732e;hb=0b01703cc07d46a6ae718e01c6beee14599a9da1;hp=d198c1c96c7c1f19cfef5ac4d8a1493ab23f2540;hpb=62946e7406184480447cc7170f4b0edb394b9d64;p=gdcm.git diff --git a/src/gdcmFile.cxx b/src/gdcmFile.cxx index d198c1c9..666a8e96 100644 --- a/src/gdcmFile.cxx +++ b/src/gdcmFile.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmFile.cxx,v $ Language: C++ - Date: $Date: 2004/11/23 11:14:13 $ - Version: $Revision: 1.159 $ + Date: $Date: 2004/11/24 11:17:47 $ + Version: $Revision: 1.161 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -75,10 +75,11 @@ File::File(std::string const & filename ) */ void File::Initialise() { - WriteMode = WMODE_DECOMPRESSED; + WriteMode = WMODE_RGB; WriteType = WTYPE_IMPL_VR; - PixelConverter = NULL; //just in case - Archive = NULL; + + PixelConverter = new PixelConvert; + Archive = new DocEntryArchive( HeaderInternal ); if ( HeaderInternal->IsReadable() ) { @@ -92,10 +93,7 @@ void File::Initialise() ImageDataSize = ImageDataSizeRaw; } - PixelConverter = new PixelConvert; PixelConverter->GrabInformationsFromHeader( HeaderInternal ); - - Archive = new DocEntryArchive( HeaderInternal ); } SaveInitialValues(); @@ -122,8 +120,6 @@ File::~File() delete HeaderInternal; } HeaderInternal = 0; - - DeleteInitialValues(); } /** @@ -133,119 +129,7 @@ File::~File() void File::SaveInitialValues() { PixelRead = -1; // no ImageData read yet. - LastAllocatedPixelDataLength = 0; Pixel_Data = 0; - - InitialSpp = ""; - InitialPhotInt = ""; - InitialPlanConfig = ""; - InitialBitsAllocated = ""; - InitialHighBit = ""; - - InitialRedLUTDescr = 0; - InitialGreenLUTDescr = 0; - InitialBlueLUTDescr = 0; - InitialRedLUTData = 0; - InitialGreenLUTData = 0; - InitialBlueLUTData = 0; - - if ( HeaderInternal->IsReadable() ) - { - // the following values *may* be modified - // by File::GetImageDataIntoVectorRaw - // we save their initial value. - InitialSpp = HeaderInternal->GetEntryByNumber(0x0028,0x0002); - InitialPhotInt = HeaderInternal->GetEntryByNumber(0x0028,0x0004); - InitialPlanConfig = HeaderInternal->GetEntryByNumber(0x0028,0x0006); - - InitialBitsAllocated = HeaderInternal->GetEntryByNumber(0x0028,0x0100); - InitialHighBit = HeaderInternal->GetEntryByNumber(0x0028,0x0102); - - // the following entries *may* be removed from the H table - // (NOT deleted ...) by File::GetImageDataIntoVectorRaw - // we keep a pointer on them. - InitialRedLUTDescr = HeaderInternal->GetDocEntryByNumber(0x0028,0x1101); - InitialGreenLUTDescr = HeaderInternal->GetDocEntryByNumber(0x0028,0x1102); - InitialBlueLUTDescr = HeaderInternal->GetDocEntryByNumber(0x0028,0x1103); - - InitialRedLUTData = HeaderInternal->GetDocEntryByNumber(0x0028,0x1201); - InitialGreenLUTData = HeaderInternal->GetDocEntryByNumber(0x0028,0x1202); - InitialBlueLUTData = HeaderInternal->GetDocEntryByNumber(0x0028,0x1203); - } -} - -/** - * \brief restores some initial values - * \warning not end user intended - */ -void File::RestoreInitialValues() -{ - if ( HeaderInternal->IsReadable() ) - { - // the following values *may* have been modified - // by File::GetImageDataIntoVectorRaw - // we restore their initial value. - if ( InitialSpp != "") - HeaderInternal->SetEntryByNumber(InitialSpp,0x0028,0x0002); - if ( InitialPhotInt != "") - HeaderInternal->SetEntryByNumber(InitialPhotInt,0x0028,0x0004); - if ( InitialPlanConfig != "") - - HeaderInternal->SetEntryByNumber(InitialPlanConfig,0x0028,0x0006); - if ( InitialBitsAllocated != "") - HeaderInternal->SetEntryByNumber(InitialBitsAllocated,0x0028,0x0100); - if ( InitialHighBit != "") - HeaderInternal->SetEntryByNumber(InitialHighBit,0x0028,0x0102); - - // the following entries *may* be have been removed from the H table - // (NOT deleted ...) by File::GetImageDataIntoVectorRaw - // we restore them. - - if (InitialRedLUTDescr) - HeaderInternal->AddEntry(InitialRedLUTDescr); - if (InitialGreenLUTDescr) - HeaderInternal->AddEntry(InitialGreenLUTDescr); - if (InitialBlueLUTDescr) - HeaderInternal->AddEntry(InitialBlueLUTDescr); - - if (InitialRedLUTData) - HeaderInternal->AddEntry(InitialBlueLUTDescr); - if (InitialGreenLUTData) - HeaderInternal->AddEntry(InitialGreenLUTData); - if (InitialBlueLUTData) - HeaderInternal->AddEntry(InitialBlueLUTData); - } -} - -/** - * \brief delete initial values (il they were saved) - * of InitialLutDescriptors and InitialLutData - */ -void File::DeleteInitialValues() -{ -// InitialLutDescriptors and InitialLutData -// will have to be deleted if the don't belong any longer -// to the Header H table when the header is deleted... - -// FIXME -// We don't know if the InitialLutData are still in the header or not ! -/* if ( InitialRedLUTDescr ) - delete InitialRedLUTDescr; - - if ( InitialGreenLUTDescr ) - delete InitialGreenLUTDescr; - - if ( InitialBlueLUTDescr ) - delete InitialBlueLUTDescr; - - if ( InitialRedLUTData ) - delete InitialRedLUTData; - - if ( InitialGreenLUTData ) - delete InitialGreenLUTData; - - if ( InitialBlueLUTData ) - delete InitialBlueLUTData;*/ } //----------------------------------------------------------------------------- @@ -325,6 +209,22 @@ uint8_t* File::GetImageData() return 0; } + if ( HeaderInternal->HasLUT() && PixelConverter->BuildRGBImage() ) + { + return PixelConverter->GetRGB(); + } + else + { + // When no LUT or LUT conversion fails, return the decompressed + return PixelConverter->GetDecompressed(); + } + +/* if ( ! GetDecompressed() ) + { + // If the decompression failed nothing can be done. + return 0; + } + uint8_t* pixelData; if ( HeaderInternal->HasLUT() && PixelConverter->BuildRGBImage() ) { @@ -336,7 +236,7 @@ uint8_t* File::GetImageData() pixelData = PixelConverter->GetDecompressed(); } -/*// PIXELCONVERT CLEANME +// PIXELCONVERT CLEANME // Restore the header in a disk-consistent state // (if user asks twice to get the pixels from disk) if ( PixelRead != -1 ) // File was "read" before @@ -391,9 +291,9 @@ uint8_t* File::GetImageData() // We say the value *is* loaded. SetPixelData(pixelData); -// END PIXELCONVERT CLEANME*/ +// END PIXELCONVERT CLEANME - return pixelData; + return pixelData;*/ } /** @@ -467,13 +367,14 @@ size_t File::GetImageDataIntoVector (void* destination, size_t maxSize) */ uint8_t* File::GetImageDataRaw () { - uint8_t* decompressed = GetDecompressed(); + return GetDecompressed(); +/* uint8_t* decompressed = GetDecompressed(); if ( ! decompressed ) { return 0; } -/*// PIXELCONVERT CLEANME +// PIXELCONVERT CLEANME // Restore the header in a disk-consistent state // (if user asks twice to get the pixels from disk) if ( PixelRead != -1 ) // File was "read" before @@ -503,9 +404,9 @@ uint8_t* File::GetImageDataRaw () SetPixelData(decompressed); PixelRead = 1; // PixelRaw -// END PIXELCONVERT CLEANME*/ +// END PIXELCONVERT CLEANME - return decompressed; + return decompressed;*/ } uint8_t* File::GetDecompressed() @@ -651,10 +552,10 @@ bool File::Write(std::string const& fileName) */ bool File::WriteBase (std::string const & fileName, FileType type) { - if ( PixelRead == -1 && type != ExplicitVR) +/* if ( PixelRead == -1 && type != ExplicitVR) { return false; - } + }*/ std::ofstream* fp1 = new std::ofstream(fileName.c_str(), std::ios::out | std::ios::binary); @@ -703,7 +604,7 @@ bool File::WriteBase (std::string const & fileName, FileType type) } // ----------------- End of Special Patch ---------------- - uint16_t grPixel = HeaderInternal->GetGrPixel(); +/* uint16_t grPixel = HeaderInternal->GetGrPixel(); uint16_t numPixel = HeaderInternal->GetNumPixel();; DocEntry* PixelElement = @@ -718,7 +619,7 @@ bool File::WriteBase (std::string const & fileName, FileType type) { // we tranformed GrayLevel pixels + LUT into RGB Pixel PixelElement->SetLength( ImageDataSize ); - } + }*/ HeaderInternal->Write(fp1, type);