Program: gdcm
Module: $RCSfile: TestAllReadCompareDicom.cxx,v $
Language: C++
- Date: $Date: 2005/11/08 09:13:22 $
- Version: $Revision: 1.52 $
+ Date: $Date: 2007/07/26 09:25:38 $
+ Version: $Revision: 1.61 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
#include "gdcmGlobal.h"
#include "gdcmTS.h"
#include "gdcmDebug.h"
+#include "gdcmUtil.h"
#include <iostream>
Components = 0;
Data = NULL;
- SwapCode = 1234;
+ //SwapCode = 1234;
}
TestFile::~TestFile()
int TestFile::ComputeSwapCode(uint32_t tag)
{
+// FIXME : 100 % useless method !
+// "gdcm" was written on disc byte per byte.
+// when you fread it, you'll get *always* "gdcm"
+// whatever the processor indianess is !
+
int swap = 0;
+ //std::cout << std::hex << "0x(" << tag << ")" << std::dec << std::endl;
+
for(int i=0;i<4;i++)
{
switch(tag&0x000000FF)
}
tag >>= 8;
}
+ //std::cout << std::hex << "0x(" << tag << ")" << std::dec << tag << std::endl;
return swap;
}
SwapCode = ComputeSwapCode(tag);
if( SwapCode == 0 )
{
+ // We shall *never* come here!
std::cout << "TestFile: Bad tag - Must be 'gdcm'" << std::endl;
return(false);
}
SizeX = ReadInt32(fp); // Size X
SizeY = ReadInt32(fp); // Size Y
SizeZ = ReadInt32(fp); // Size Z
- ScalarSize = ReadInt16(fp)/8; // bits per scalar
+ ScalarSize = ReadInt16(fp)/8; // bytes per scalar
Components = ReadInt16(fp); // Number of components
return(true);
if( !Data )
return(false);
- // Read data
+ // Read data Note : .tst images are *always* created
+ // on little endian processor !
fp->read((char *)Data,GetDataSize());
-
- if (GetScalarSize() == 1 || GetSwapCode() == 1234)
+
+ // Track BigEndian troubles
+ std::cout << " ScalarSize : " << GetScalarSize()
+ << " IsCurrentProcessorBigEndian:"
+ << GDCM_NAME_SPACE::Util::IsCurrentProcessorBigEndian()
+ << std::endl;
+
+ //if (GetScalarSize() == 1 || GetSwapCode() == 1234)
+ if (GetScalarSize() == 1 || !GDCM_NAME_SPACE::Util::IsCurrentProcessorBigEndian() )
{
return true;
}
// We *know* DataSize may be 1 or 2 !
uint16_t g;
-// Track BigEndian troubles
-std::cout << " calarSize : " << GetScalarSize()
- << " SwapCode:" << GetSwapCode()
- << std::endl;
-
+ std::cout << " Let's swap Pixels" <<std::endl;
+
for (unsigned int i=0; i<GetDataSize()/2; i++)
{
g = ((uint16_t *)Data)[i];
WriteInt8(fp,'d'); // Bitmap tag - must be 'd'
WriteInt8(fp,'c'); // Bitmap tag - must be 'c'
WriteInt8(fp,'m'); // Bitmap tag - must be 'm'
+
+ // FIXME : Think of writting an int32, better !
+ // (('g' << 8 + 'd') << 8 + 'c') + 'm'
+ // if you want to use it to check the endianess.
+ // (and upload again *all* the .tst files ...)
WriteInt32(fp,SizeX); // Size X
WriteInt32(fp,SizeY); // Size Y
WriteInt32(fp,SizeZ); // Size Z
std::cout << "1...";
// new style
- gdcm::File *f = gdcm::File::New();
- f->SetLoadMode ( gdcm::LD_ALL ); // Load everything
+ GDCM_NAME_SPACE::File *f = GDCM_NAME_SPACE::File::New();
+ f->SetLoadMode ( GDCM_NAME_SPACE::LD_ALL ); // Load everything
f->SetFileName( filename );
f->Load();
f->Delete();
return 1;
}
- gdcm::FileHelper *tested = gdcm::FileHelper::New( f );
+ GDCM_NAME_SPACE::FileHelper *tested = GDCM_NAME_SPACE::FileHelper::New( f );
////// Step 2:
////// Check for existence of reference baseline dicom file:
}
// Test the data size
- if (testedDataSize != referenceDataSize)
+ // *actual* image length may differ to 1 with Pixel Data Element length!
+ if ((testedDataSize+testedDataSize%2) !=
+ (referenceDataSize+referenceDataSize%2) )
{
std::cout << " Failed" << std::endl
<< " pixel ("
<< " Image size: ("
<< tested->GetFile()->GetXSize() << ","
<< tested->GetFile()->GetYSize() << ","
- << tested->GetFile()->GetZSize() << ")"
+ << tested->GetFile()->GetZSize() << ") nb of scalar components "
+ << tested->GetFile()->GetNumberOfScalarComponents()
<< std::endl;
tested->Delete();
delete reference;
}
// Test the data content
+ int length = tested->GetFile()->GetXSize()*tested->GetFile()->GetYSize()*tested->GetFile()->GetZSize()
+ *reference->GetScalarSize()*tested->GetFile()->GetNumberOfScalarComponents();
+
+ // *actual* image length may differ to 1 with Pixel Data Element length!
+ if (length != testedDataSize)
+ std::cout <<"--------------------length " << length << " != testedDataSize " << testedDataSize << std::endl;
if ( memcmp(testedImageData, referenceImageData,
- testedDataSize) != 0 )
+ length/*testedDataSize*/) != 0 )
{
std::string ts = tested->GetFile()->GetTransferSyntax();
<< ") differ (as expanded in memory)."
<< std::endl
<< " compression : "
- << gdcm::Global::GetTS()->GetValue(ts) << std::endl;
+ << GDCM_NAME_SPACE::Global::GetTS()->GetValue(ts) << std::endl;
std::cout << " list of the first " << MAX_NUMBER_OF_DIFFERENCE
<< " pixels differing (pos : test - ref) :"
int TestAllReadCompareDicom(int argc, char *argv[])
{
// Temporarily added, to track BigEndian troubles
-gdcm::Debug::DebugOn();
+GDCM_NAME_SPACE::Debug::WarningOn();
if (argc == 4)
- gdcm::Debug::DebugOn();
+ GDCM_NAME_SPACE::Debug::DebugOn();
if ( argc >= 3 )
{
std::string baseLineDir = GDCM_DATA_ROOT;
baseLineDir += "/BaselineDicom";
- if( !gdcm::DirList::IsDirectory(baseLineDir) )
+ if( !GDCM_NAME_SPACE::DirList::IsDirectory(baseLineDir) )
{
std::cerr << " The reference baseline directory " << std::endl
<< " "
return 1;
}
+//if (gdcmDataImages[i] == "D_CLUNIE_CT2_RLE.dcm")
+// gdcm::Debug::DebugOn(); // track pb on BigEndian Proc
+//else
+ GDCM_NAME_SPACE::Debug::DebugOff();
+
////// Step 1 (see above description):
std::string filename = GDCM_DATA_ROOT;
filename += "/";