// gdcmParse.cxx
-
+//-----------------------------------------------------------------------------
//This is needed when compiling in debug mode
#ifdef _MSC_VER
// 'type' : forcing value to bool 'true' or 'false' (performance warning)
#include "gdcmFile.h"
#include "gdcmUtil.h"
-#include "iddcmjpeg.h" // for the 'LibIDO' Jpeg LossLess
#define str2num(str, typeNum) *((typeNum *)(str))
-/////////////////////////////////////////////////////////////////
+//-----------------------------------------------------------------------------
/**
* \ingroup gdcmFile
* \brief Parse pixel data from disk and *prints* the result
*
*/
bool gdcmFile::ParsePixelData(void) {
+// DO NOT remove the printf s.
+// The ONLY purpose of this method is to PRINT the content
+ FILE *fp;
- if ( !OpenFile())
+ if ( !(fp=Header->OpenFile()))
return false;
- if ( fseek(fp, GetPixelOffset(), SEEK_SET) == -1 ) {
- CloseFile();
+ if ( fseek(fp, Header->GetPixelOffset(), SEEK_SET) == -1 ) {
+ Header->CloseFile();
return false;
}
- if ( !IsDicomV3() ||
- IsImplicitVRLittleEndianTransferSyntax() ||
- IsExplicitVRLittleEndianTransferSyntax() ||
- IsExplicitVRBigEndianTransferSyntax() ||
- IsDeflatedExplicitVRLittleEndianTransferSyntax() ) {
+ if ( !Header->IsDicomV3() ||
+ Header->IsImplicitVRLittleEndianTransferSyntax() ||
+ Header->IsExplicitVRLittleEndianTransferSyntax() ||
+ Header->IsExplicitVRBigEndianTransferSyntax() ||
+ Header->IsDeflatedExplicitVRLittleEndianTransferSyntax() ) {
printf ("gdcmFile::ParsePixelData : non JPEG/RLE File\n");
- return 0;
+ return false;
}
int nb;
- std::string str_nb=gdcmHeader::GetPubElValByNumber(0x0028,0x0100);
+ std::string str_nb=Header->GetPubElValByNumber(0x0028,0x0100);
if (str_nb == GDCM_UNFOUND ) {
nb = 16;
} else {
}
int nBytes= nb/8;
- int taille = GetXSize() * GetYSize() * GetSamplesPerPixel();
+ int taille = Header->GetXSize() * Header->GetYSize() * Header->GetSamplesPerPixel();
printf ("Checking the Dicom-encapsulated Jpeg/RLE Pixels\n");
long ftellRes;
char * destination = NULL;
- // ------------------------------- for Parsing : Position on begining of Jpeg/RLE Pixels
+ // -------------------- for Parsing : Position on begining of Jpeg/RLE Pixels
- if( !IsRLELossLessTransferSyntax()) {
+ if( !Header->IsRLELossLessTransferSyntax()) {
// JPEG Image
-
- std::cout << "JPEG image" << std::endl;
ftellRes=ftell(fp);
- fread(&ItemTagGr,2,1,fp); // Reading (fffe) : Basic Offset Table Item Tag Gr
- fread(&ItemTagEl,2,1,fp); // Reading (e000) : Basic Offset Table Item Tag El
- if(GetSwapCode()) {
- ItemTagGr=SwapShort(ItemTagGr);
- ItemTagEl=SwapShort(ItemTagEl);
+ fread(&ItemTagGr,2,1,fp); //Reading (fffe):Basic Offset Table Item Tag Gr
+ fread(&ItemTagEl,2,1,fp); //Reading (e000):Basic Offset Table Item Tag El
+ if(Header->GetSwapCode()) {
+ ItemTagGr=Header->SwapShort(ItemTagGr);
+ ItemTagEl=Header->SwapShort(ItemTagEl);
}
printf ("at %x : ItemTag (should be fffe,e000): %04x,%04x\n",
ftellRes,ItemTagGr,ItemTagEl );
ftellRes=ftell(fp);
fread(&ln,4,1,fp);
- if(GetSwapCode())
- ln=SwapLong(ln); // Basic Offset Table Item Lentgh
+ if(Header->GetSwapCode())
+ ln=Header->SwapLong(ln); // Basic Offset Table Item Lentgh
printf("at %x : Basic Offset Table Item Lentgh (??) %d x(%08x)\n",
ftellRes,ln,ln);
if (ln != 0) {
ftellRes=ftell(fp);
fread(&ItemTagGr,2,1,fp); // Reading (fffe) : Item Tag Gr
fread(&ItemTagEl,2,1,fp); // Reading (e000) : Item Tag El
- if(GetSwapCode()) {
- ItemTagGr=SwapShort(ItemTagGr);
- ItemTagEl=SwapShort(ItemTagEl);
+ if(Header->GetSwapCode()) {
+ ItemTagGr=Header->SwapShort(ItemTagGr);
+ ItemTagEl=Header->SwapShort(ItemTagEl);
}
printf ("at %x : ItemTag (should be fffe,e000 or e0dd): %04x,%04x\n",
ftellRes,ItemTagGr,ItemTagEl );
- while ( ( ItemTagGr == 0xfffe) && (ItemTagEl != 0xe0dd) ) { // Parse fragments
+ while ( ( ItemTagGr==0xfffe) && (ItemTagEl!=0xe0dd) ) { // Parse fragments
ftellRes=ftell(fp);
fread(&ln,4,1,fp);
- if(GetSwapCode())
- ln=SwapLong(ln); // length
+ if(Header->GetSwapCode())
+ ln=Header->SwapLong(ln); // length
printf(" at %x : fragment length %d x(%08x)\n",
ftellRes, ln,ln);
ftellRes=ftell(fp);
fread(&ItemTagGr,2,1,fp); // Reading (fffe) : Item Tag Gr
fread(&ItemTagEl,2,1,fp); // Reading (e000) : Item Tag El
- if(GetSwapCode()) {
- ItemTagGr=SwapShort(ItemTagGr);
- ItemTagEl=SwapShort(ItemTagEl);
+ if(Header->GetSwapCode()) {
+ ItemTagGr=Header->SwapShort(ItemTagGr);
+ ItemTagEl=Header->SwapShort(ItemTagEl);
}
printf ("at %x : ItemTag (should be fffe,e000 or e0dd): %04x,%04x\n",
ftellRes,ItemTagGr,ItemTagEl );
} else {
// RLE Image
-
- std::cout << "RLE image" << std::endl;
long RleSegmentLength[15],fragmentLength;
guint32 nbRleSegments;
guint32 RleSegmentOffsetTable[15];
ftellRes=ftell(fp);
// Basic Offset Table with Item Value
// Item Tag
- fread(&ItemTagGr,2,1,fp); // Reading (fffe):Basic Offset Table Item Tag Gr
- fread(&ItemTagEl,2,1,fp); // Reading (e000):Basic Offset Table Item Tag El
- if(GetSwapCode()) {
- ItemTagGr=SwapShort(ItemTagGr);
- ItemTagEl=SwapShort(ItemTagEl);
+ fread(&ItemTagGr,2,1,fp); //Reading (fffe):Basic Offset Table Item Tag Gr
+ fread(&ItemTagEl,2,1,fp); //Reading (e000):Basic Offset Table Item Tag El
+ if(Header->GetSwapCode()) {
+ ItemTagGr=Header->SwapShort(ItemTagGr);
+ ItemTagEl=Header->SwapShort(ItemTagEl);
}
printf ("at %x : ItemTag (should be fffe,e000): %04x,%04x\n",
ftellRes,ItemTagGr,ItemTagEl );
// Item Length
ftellRes=ftell(fp);
fread(&ln,4,1,fp);
- if(GetSwapCode())
- ln=SwapLong(ln); // Basic Offset Table Item Lentgh
+ if(Header->GetSwapCode())
+ ln=Header->SwapLong(ln); // Basic Offset Table Item Lentgh
printf("at %x : Basic Offset Table Item Lentgh (??) %d x(%08x)\n",
ftellRes,ln,ln);
if (ln != 0) {
ftellRes=ftell(fp);
fread(&ItemTagGr,2,1,fp); // Reading (fffe) : Item Tag Gr
fread(&ItemTagEl,2,1,fp); // Reading (e000) : Item Tag El
- if(GetSwapCode()) {
- ItemTagGr=SwapShort(ItemTagGr);
- ItemTagEl=SwapShort(ItemTagEl);
+ if(Header->GetSwapCode()) {
+ ItemTagGr=Header->SwapShort(ItemTagGr);
+ ItemTagEl=Header->SwapShort(ItemTagEl);
}
printf ("at %x : ItemTag (should be fffe,e000 or e0dd): %04x,%04x\n",
ftellRes,ItemTagGr,ItemTagEl );
// Parse fragments of the current Fragment (Frame)
ftellRes=ftell(fp);
fread(&fragmentLength,4,1,fp);
- if(GetSwapCode())
- fragmentLength=SwapLong(fragmentLength); // length
+ if(Header->GetSwapCode())
+ fragmentLength=Header->SwapLong(fragmentLength); // length
printf(" at %x : 'fragment' length %d x(%08x)\n",
ftellRes, fragmentLength,fragmentLength);
//------------------ scanning (not reading) fragment pixels
- fread(&nbRleSegments,4,1,fp); // Reading : Number of RLE Segments
- if(GetSwapCode())
- nbRleSegments=SwapLong(nbRleSegments);
- printf(" Nb of RLE Segments : %d\n",nbRleSegments);
+ fread(&nbRleSegments,4,1,fp); // Reading : Number of RLE Segments
+ if(Header->GetSwapCode())
+ nbRleSegments=Header->SwapLong(nbRleSegments);
+ printf(" Nb of RLE Segments : %d\n",nbRleSegments);
for(int k=1; k<=15; k++) { // Reading RLE Segments Offset Table
ftellRes=ftell(fp);
fread(&RleSegmentOffsetTable[k],4,1,fp);
- if(GetSwapCode())
- RleSegmentOffsetTable[k]=SwapLong(RleSegmentOffsetTable[k]);
+ if(Header->GetSwapCode())
+ RleSegmentOffsetTable[k]=Header->SwapLong(RleSegmentOffsetTable[k]);
printf(" at : %x Offset Segment %d : %d (%x)\n",
- ftellRes,k,RleSegmentOffsetTable[k],RleSegmentOffsetTable[k]);
+ ftellRes,k,RleSegmentOffsetTable[k],
+ RleSegmentOffsetTable[k]);
}
- if (nbRleSegments>1) {
- for(int k=1; k<=nbRleSegments-1; k++) { // skipping (not reading) RLE Segments
- RleSegmentLength[k]=RleSegmentOffsetTable[k+1]-RleSegmentOffsetTable[k];
+ if (nbRleSegments>1) { // skipping (not reading) RLE Segments
+ for(int k=1; k<=nbRleSegments-1; k++) {
+ RleSegmentLength[k]= RleSegmentOffsetTable[k+1]
+ - RleSegmentOffsetTable[k];
ftellRes=ftell(fp);
- printf (" Segment %d : Length = %d x(%x) Start at %x\n",
- k,RleSegmentLength[k],RleSegmentLength[k], ftellRes);
+ printf (" Segment %d : Length = %d x(%x) Start at %x\n",
+ k,RleSegmentLength[k],RleSegmentLength[k], ftellRes);
fseek(fp,RleSegmentLength[k],SEEK_CUR);
}
}
- RleSegmentLength[nbRleSegments] = fragmentLength - RleSegmentOffsetTable[nbRleSegments] ;
- // TODO : Check the value
+ RleSegmentLength[nbRleSegments]= fragmentLength
+ - RleSegmentOffsetTable[nbRleSegments];
ftellRes=ftell(fp);
- printf (" Segment %d : Length = %d x(%x) Start at %x\n",
+ printf (" Segment %d : Length = %d x(%x) Start at %x\n",
nbRleSegments,RleSegmentLength[nbRleSegments],
RleSegmentLength[nbRleSegments],ftellRes);
ftellRes=ftell(fp);
fread(&ItemTagGr,2,1,fp); // Reading (fffe) : Item Tag Gr
fread(&ItemTagEl,2,1,fp); // Reading (e000) : Item Tag El
- if(GetSwapCode()) {
- ItemTagGr=SwapShort(ItemTagGr);
- ItemTagEl=SwapShort(ItemTagEl);
+ if(Header->GetSwapCode()) {
+ ItemTagGr=Header->SwapShort(ItemTagGr);
+ ItemTagEl=Header->SwapShort(ItemTagEl);
}
printf ("at %x : ItemTag (should be fffe,e000 or e0dd): %04x,%04x\n",
ftellRes,ItemTagGr,ItemTagEl );
}
}
- return 1;
+ return true;
}
+
+//-----------------------------------------------------------------------------