Program: gdcm
Module: $RCSfile: gdcmPixelReadConvert.cxx,v $
Language: C++
- Date: $Date: 2005/10/21 17:11:33 $
- Version: $Revision: 1.84 $
+ Date: $Date: 2005/11/08 16:35:54 $
+ Version: $Revision: 1.97 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
namespace gdcm
{
-//bool ReadMPEGFile (std::ifstream *fp, void *image_buffer, size_t lenght);
+bool ReadMPEGFile (std::ifstream *fp, char *inputdata, size_t lenght);
bool gdcm_read_JPEG2000_file (void* raw,
char *inputdata, size_t inputlength);
//-----------------------------------------------------------------------------
//PixelSize = file->GetPixelSize(); Useless
PixelSign = file->IsSignedPixelData();
SwapCode = file->GetSwapCode();
- std::string ts = file->GetTransferSyntax();
- IsRaw =
- ( ! file->IsDicomV3() )
- || Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ImplicitVRLittleEndian
- || Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ImplicitVRBigEndianPrivateGE
- || Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ExplicitVRLittleEndian
- || Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ExplicitVRBigEndian
- || Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::DeflatedExplicitVRLittleEndian;
-
- IsPrivateGETransferSyntax =
+
+ if (! file->IsDicomV3() ) // Should be ACR-NEMA file
+ {
+ IsRaw = true;
+ // Don't loose time checking unexistant Transfer Syntax !
+ IsPrivateGETransferSyntax = IsMPEG
+ = IsJPEG2000 = IsJPEGLS = IsJPEGLossy
+ = IsJPEGLossless = IsRLELossless
+ = false;
+ }
+ else
+ {
+ std::string ts = file->GetTransferSyntax();
+
+ IsRaw = false;
+ while (true)
+ {
+ // mind the order : check the most usual first.
+ if( IsRaw = Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ExplicitVRLittleEndian) break;
+ if( IsRaw = Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ImplicitVRLittleEndian ) break;
+ if( IsRaw = Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ExplicitVRBigEndian) break;
+ if( IsRaw = Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ImplicitVRBigEndianPrivateGE) break;
+ if( IsRaw = Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::DeflatedExplicitVRLittleEndian) break;
+ break;
+ }
+
+ IsPrivateGETransferSyntax =
( Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ImplicitVRBigEndianPrivateGE );
- IsMPEG = Global::GetTS()->IsMPEG(ts);
- IsJPEG2000 = Global::GetTS()->IsJPEG2000(ts);
- IsJPEGLS = Global::GetTS()->IsJPEGLS(ts);
- IsJPEGLossy = Global::GetTS()->IsJPEGLossy(ts);
- IsJPEGLossless = Global::GetTS()->IsJPEGLossless(ts);
- IsRLELossless = Global::GetTS()->IsRLELossless(ts);
+ IsMPEG = IsJPEG2000 = IsJPEGLS = IsJPEGLossy = IsJPEGLossless = IsRLELossless = false;
+
+ if (!IsRaw)
+ {
+ while(true)
+ {
+ // mind the order : check the most usual first.
+ if( IsJPEGLossy = Global::GetTS()->IsJPEGLossy(ts) ) break;
+ if( IsJPEGLossless = Global::GetTS()->IsJPEGLossless(ts) ) break;
+ if( IsRLELossless = Global::GetTS()->IsRLELossless(ts) ) break;
+ if( IsJPEG2000 = Global::GetTS()->IsJPEG2000(ts) ) break;
+ if( IsMPEG = Global::GetTS()->IsMPEG(ts) ) break;
+ if( IsJPEGLS = Global::GetTS()->IsJPEGLS(ts) ) break;
+ gdcmWarningMacro("Unexepected Transfer Syntax :[" << ts << "]");
+ break;
+ }
+ }
+ }
PixelOffset = file->GetPixelOffset();
PixelDataLength = file->GetPixelAreaLength();
LutGreenDescriptor = file->GetEntryString( 0x0028, 0x1102 );
LutBlueDescriptor = file->GetEntryString( 0x0028, 0x1103 );
- // The following comment is probabely meaningless, since LUT are *always*
+ // FIXME : The following comment is probabely meaningless, since LUT are *always*
// loaded at parsing time, whatever their length is.
// Depending on the value of Document::MAX_SIZE_LOAD_ELEMENT_VALUE
//gdcmWarningMacro( "Sorry, MPEG not yet taken into account" );
//return false;
// fp has already been seek to start of mpeg
- //ReadMPEGFile(fp, Raw, PixelDataLength);
+ ReadMPEGFile(fp, (char*)Raw, PixelDataLength);
return true;
}
else
}
/**
- * \brief Build Red/Green/Blue/Alpha LUT from File
- * when (0028,0004),Photometric Interpretation = [PALETTE COLOR ]
- * and (0028,1101),(0028,1102),(0028,1102)
- * - xxx Palette Color Lookup Table Descriptor - are found
- * and (0028,1201),(0028,1202),(0028,1202)
- * - xxx Palette Color Lookup Table Data - are found
+ * \brief Build Red/Green/Blue/Alpha LUT from File when :
+ * - (0028,0004) : Photometric Interpretation == [PALETTE COLOR ]
+ * and
+ * - (0028,1101),(0028,1102),(0028,1102)
+ * xxx Palette Color Lookup Table Descriptor are found
+ * and
+ * - (0028,1201),(0028,1202),(0028,1202)
+ * xxx Palette Color Lookup Table Data - are found
* \warning does NOT deal with :
- * 0028 1100 Gray Lookup Table Descriptor (Retired)
- * 0028 1221 Segmented Red Palette Color Lookup Table Data
- * 0028 1222 Segmented Green Palette Color Lookup Table Data
- * 0028 1223 Segmented Blue Palette Color Lookup Table Data
+ * - 0028 1100 Gray Lookup Table Descriptor (Retired)
+ * - 0028 1221 Segmented Red Palette Color Lookup Table Data
+ * - 0028 1222 Segmented Green Palette Color Lookup Table Data
+ * - 0028 1223 Segmented Blue Palette Color Lookup Table Data
* no known Dicom reader deals with them :-(
* @return a RGBA Lookup Table
*/
// Therefore, in either case, if the file is in
// 'ImplicitVR BigEndian PrivateGE Transfer Syntax', then GDCM needs to switch
// the byte swapping code when entering the pixel data.
-
+
if ( IsPrivateGETransferSyntax )
{
// PrivateGETransferSyntax only exists for 'true' Dicom images
break;
}
}
-
+
if ( BitsAllocated == 16 )
{
uint16_t *im16 = (uint16_t*)Raw;
// - [Planar 1] AND [Photo C] handled with ConvertYcBcRPlanesToRGBPixels()
// - [Planar 2] OR [Photo D] requires LUT intervention.
- gdcmWarningMacro("--> ConvertHandleColor"
+ gdcmDebugMacro("--> ConvertHandleColor "
<< "Planar Configuration " << PlanarConfiguration );
if ( ! IsRawRGB() )
{
// [Planar 2] OR [Photo D]: LUT intervention done outside
- gdcmWarningMacro("--> RawRGB : LUT intervention done outside");
+ gdcmDebugMacro("--> RawRGB : LUT intervention done outside");
return;
}