Program: gdcm
Module: $RCSfile: TestWriteSimple.cxx,v $
Language: C++
- Date: $Date: 2005/08/20 09:10:24 $
- Version: $Revision: 1.34 $
+ Date: $Date: 2006/04/11 16:05:03 $
+ Version: $Revision: 1.49 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
#include "gdcmFile.h"
#include "gdcmFileHelper.h"
#include "gdcmDebug.h"
+#include "gdcmGlobal.h"
+#include "gdcmDictSet.h"
#include <iostream>
#include <sstream>
} Image;
Image Images [] = {
- {256, 256, 1, 1, 8, 8, 0, 'a'},
- {256, 256, 1, 1, 8, 8, 0, 'e'},
- {256, 256, 1, 1, 8, 8, 0, 'i'},
-
- {512, 256, 1, 1, 8, 8, 0, 'a'},
- {512, 256, 1, 1, 8, 8, 0, 'e'},
- {512, 256, 1, 1, 8, 8, 0, 'i'},
-
- {256, 512, 1, 1, 8, 8, 0, 'a'},
- {256, 512, 1, 1, 8, 8, 0, 'e'},
- {256, 512, 1, 1, 8, 8, 0, 'i'},
-
- {256, 512, 1, 1, 16, 16, 0, 'a'},
- {256, 512, 1, 1, 16, 16, 0, 'e'},
- {256, 512, 1, 1, 16, 16, 0, 'i'},
- {256, 512, 1, 1, 16, 16, 0, 'a'},
- {256, 512, 1, 1, 16, 16, 0, 'e'},
- {256, 512, 1, 1, 16, 16, 0, 'i'},
-
- {512, 256, 10, 1, 8, 8, 0, 'a'},
- {512, 256, 10, 1, 8, 8, 0, 'e'},
- {512, 256, 10, 1, 8, 8, 0, 'i'},
- {512, 256, 10, 3, 8, 8, 0, 'a'},
- {512, 256, 10, 3, 8, 8, 0, 'e'},
- {512, 256, 10, 3, 8, 8, 0, 'i'},
-
- {256, 256, 1, 1, 8, 8, 1, 'a'},
- {256, 256, 1, 1, 8, 8, 1, 'e'},
- {256, 256, 1, 1, 8, 8, 1, 'i'},
-
- {512, 256, 1, 1, 8, 8, 1, 'a'},
- {512, 256, 1, 1, 8, 8, 1, 'e'},
- {512, 256, 1, 1, 8, 8, 1, 'i'},
-
- {256, 512, 1, 1, 8, 8, 1, 'a'},
- {256, 512, 1, 1, 8, 8, 1, 'e'},
- {256, 512, 1, 1, 8, 8, 1, 'i'},
-
- {256, 512, 1, 1, 16, 16, 1, 'a'},
- {256, 512, 1, 1, 16, 16, 1, 'e'},
- {256, 512, 1, 1, 16, 16, 1, 'i'},
- {256, 512, 1, 1, 16, 16, 1, 'a'},
- {256, 512, 1, 1, 16, 16, 1, 'e'},
- {256, 512, 1, 1, 16, 16, 1, 'i'},
-
- {512, 256, 10, 1, 8, 8, 1, 'a'},
- {512, 256, 10, 1, 8, 8, 1, 'e'},
- {512, 256, 10, 1, 8, 8, 1, 'i'},
- {512, 256, 10, 3, 8, 8, 1, 'a'},
- {512, 256, 10, 3, 8, 8, 1, 'e'},
- {512, 256, 10, 3, 8, 8, 1, 'i'},
+ {128, 128, 1, 1, 8, 8, 0, 'e'},
+ {256, 128, 1, 1, 8, 8, 0, 'a'},
+ {128, 128, 1, 1, 8, 8, 0, 'i'},
+
+ {128, 128, 1, 1, 8, 8, 0, 'a'},
+ {256, 128, 1, 1, 8, 8, 0, 'i'},
+
+
+ {256, 128, 1, 1, 8, 8, 0, 'e'},
+ {128, 128, 1, 1, 16, 16, 0, 'e'},
+ {128, 256, 1, 1, 16, 16, 0, 'e'},
+
+ {128, 256, 1, 1, 8, 8, 0, 'e'},
+ {128, 256, 1, 1, 8, 8, 0, 'i'},
+ {128, 256, 1, 1, 8, 8, 0, 'a'},
+
+ {128, 256, 1, 1, 16, 16, 0, 'i'},
+ {128, 256, 1, 1, 16, 16, 0, 'i'},
+ {128, 256, 1, 1, 16, 16, 0, 'a'},
+ {128, 256, 1, 1, 16, 16, 0, 'a'},
+
+ {256, 128, 10, 1, 8, 8, 0, 'e'},
+ {256, 128, 10, 3, 8, 8, 0, 'e'},
+ {256, 128, 10, 3, 8, 8, 0, 'i'},
+ {256, 128, 10, 1, 8, 8, 0, 'i'},
+ {256, 128, 10, 1, 8, 8, 0, 'a'},
+ {256, 128, 10, 3, 8, 8, 0, 'a'},
+
+ {128, 128, 1, 1, 8, 8, 1, 'e'},
+ {128, 128, 1, 1, 8, 8, 1, 'i'},
+ {128, 128, 1, 1, 8, 8, 1, 'a'},
+
+ {256, 128, 1, 1, 8, 8, 1, 'e'},
+ {256, 128, 1, 1, 8, 8, 1, 'i'},
+ {256, 128, 1, 1, 8, 8, 1, 'a'},
+
+ {128, 256, 1, 1, 8, 8, 1, 'a'},
+ {128, 256, 1, 1, 8, 8, 1, 'e'},
+ {128, 256, 1, 1, 8, 8, 1, 'i'},
+
+ {128, 256, 1, 1, 16, 16, 1, 'e'},
+ {128, 256, 1, 1, 16, 16, 1, 'e'},
+ {128, 256, 1, 1, 16, 16, 1, 'i'},
+ {128, 256, 1, 1, 16, 16, 1, 'i'},
+ {128, 256, 1, 1, 16, 16, 1, 'a'},
+ {128, 256, 1, 1, 16, 16, 1, 'a'},
+
+ {256, 128, 10, 1, 8, 8, 1, 'e'},
+ {256, 128, 10, 1, 8, 8, 1, 'i'},
+ {256, 128, 10, 1, 8, 8, 1, 'a'},
+
+ {256, 128, 10, 3, 8, 8, 1, 'e'},
+ {256, 128, 10, 3, 8, 8, 1, 'i'},
+ {256, 128, 10, 3, 8, 8, 1, 'a'},
{0, 0, 1, 1, 8, 8, 0, 'i'} // to find the end
};
+
+const unsigned int MAX_NUMBER_OF_DIFFERENCE = 10;
+
int WriteSimple(Image &img)
{
+
+ std::cout << "======================= WriteSimple =========(begin of processing current image)" << std::endl;
std::ostringstream fileName;
fileName.str("");
fileName << "TestWriteSimple";
-// Step 1 : Create the header of the image
+// Step 1 : Create an empty FileHelper
+
std::cout << " 1...";
- gdcm::File *fileToBuild = new gdcm::File();
+ gdcm::FileHelper *fileH = gdcm::FileHelper::New();
+
+ // Get the (empty) image header.
+ gdcm::File *fileToBuild = fileH->GetFile();
std::ostringstream str;
// Set the image size
str.str("");
str << img.sizeX;
- fileToBuild->InsertValEntry(str.str(),0x0028,0x0011); // Columns
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0011,"US"); // Columns
str.str("");
str << img.sizeY;
- fileToBuild->InsertValEntry(str.str(),0x0028,0x0010); // Rows
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0010,"US"); // Rows
if(img.sizeZ>1)
{
str.str("");
str << img.sizeZ;
- fileToBuild->InsertValEntry(str.str(),0x0028,0x0008); // Number of Frames
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0008, "IS"); // Number of Frames
}
fileName << "-" << img.sizeX << "-" << img.sizeY << "-" << img.sizeZ;
// Set the pixel type
str.str("");
str << img.componentSize;
- fileToBuild->InsertValEntry(str.str(),0x0028,0x0100); // Bits Allocated
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0100,"US"); // Bits Allocated
str.str("");
str << img.componentUse;
- fileToBuild->InsertValEntry(str.str(),0x0028,0x0101); // Bits Stored
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0101,"US"); // Bits Stored
str.str("");
str << ( img.componentSize - 1 );
- fileToBuild->InsertValEntry(str.str(),0x0028,0x0102); // High Bit
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0102,"US"); // High Bit
// Set the pixel representation
str.str("");
str << img.sign;
- fileToBuild->InsertValEntry(str.str(),0x0028,0x0103); // Pixel Representation
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0103, "US"); // Pixel Representation
fileName << "-" << img.componentSize;
if(img.sign == 0)
switch (img.writeMode)
{
case 'a' :
- fileName << ".ACR"; break;
+ fileName << ".ACR"; break;
case 'e' :
fileName << ".EXPL"; break;
case 'i' :
fileName << ".IMPL"; break;
-}
+ }
+ std::cout << "[" << fileName.str() << "]...";
// Set the samples per pixel
str.str("");
str << img.components;
- fileToBuild->InsertValEntry(str.str(),0x0028,0x0002); // Samples per Pixel
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0002, "US"); // Samples per Pixel
// Step 2 : Create the output image
std::cout << "2...";
}
}
-// Step 3 : Create the file of the image
+// Step 3 : Set the image Pixel Data
std::cout << "3...";
- gdcm::FileHelper *fileH = new gdcm::FileHelper(fileToBuild);
fileH->SetImageData(imageData,size);
// Step 4 : Set the writting mode and write the image
- std::cout << "4...";
fileH->SetWriteModeToRaw();
+ std::cout << "4'...";
switch (img.writeMode)
{
case 'a' : // Write an ACR file
break;
default :
- std::cout << "Failed\n"
+ std::cout << "Failed for [" << fileName.str() << "]\n"
<< " Write mode '"<<img.writeMode<<"' is undefined\n";
- delete fileH;
- delete fileToBuild;
+ fileH->Delete();
delete[] imageData;
return 1;
}
+ std::cout << std::endl;
+ fileToBuild->Print();
+
if( !fileH->Write(fileName.str()) )
{
- std::cout << "Failed\n"
- << " File in unwrittable\n";
+ std::cout << "Failed for [" << fileName.str() << "]\n"
+ << " File is unwrittable" << std::endl;
+
+ fileH->Delete();
- delete fileH;
- delete fileToBuild;
delete[] imageData;
return 1;
}
// Step 5 : Read the written image
- std::cout << "5...";
+ std::cout << "5..." << std::endl;
// old form.
//gdcm::FileHelper *reread = new gdcm::FileHelper( fileName.str() );
// Better use :
- gdcm::FileHelper *reread = new gdcm::FileHelper( );
- reread->SetFileName( fileName.str() );
- reread->SetLoadMode(0); // Load everything
- // Other possible values are NO_SEQ, NO_SHADOW,
- // NO_SEQ|NO_SHADOW, NO_SHADOWSEQ
- reread->Load();
+ gdcm::File *f = gdcm::File::New( );
+ f->SetLoadMode(gdcm::LD_ALL);
+ f->SetFileName( fileName.str() );
+
+ //reread->SetFileName( fileName.str() );
+ //reread->SetLoadMode(gdcm::LD_ALL); // Load everything
+ // Possible values are
+ // gdcm::LD_ALL,
+ // gdcm::LD_NOSEQ,
+ // gdcm::LD_NOSHADOW,
+ // gdcm::LD_NOSEQ|gdcm::LD_NOSHADOW,
+ // gdcm::LD_NOSHADOWSEQ
+
+ f->Load();
+ // reread->Load();
+ gdcm::FileHelper *reread = gdcm::FileHelper::New( f );
+
+ reread->Print();
if( !reread->GetFile()->IsReadable() )
{
std::cerr << "Failed" << std::endl
- << "Could not read written image : " << fileName << std::endl;
- delete fileToBuild;
- delete fileH;
- delete reread;
+ << "Could not read written image : " << fileName.str() << std::endl;
+ fileToBuild->Delete();
+ fileH->Delete();
+ reread->Delete();
delete[] imageData;
return 1;
}
// Step 6 : Compare to the written image
- std::cout << "6...";
+ std::cout << "6..." << std::endl;
size_t dataSizeWritten = reread->GetImageDataSize();
uint8_t *imageDataWritten = reread->GetImageData();
<< " File type differ: "
<< fileH->GetWriteType() << " # "
<< reread->GetFile()->GetFileType() << std::endl;
- delete fileToBuild;
- delete fileH;
- delete reread;
+ fileToBuild->Delete();
+ fileH->Delete();
+ reread->Delete();
delete[] imageData;
return 1;
fileToBuild->GetYSize() != reread->GetFile()->GetYSize() ||
fileToBuild->GetZSize() != reread->GetFile()->GetZSize())
{
- std::cout << "Failed" << std::endl
+ std::cout << "Failed for [" << fileName.str() << "]" << std::endl
<< " X Size differs: "
<< "X: " << fileToBuild->GetXSize() << " # "
<< reread->GetFile()->GetXSize() << " | "
<< reread->GetFile()->GetYSize() << " | "
<< "Z: " << fileToBuild->GetZSize() << " # "
<< reread->GetFile()->GetZSize() << std::endl;
- delete fileToBuild;
- delete fileH;
- delete reread;
+ fileToBuild->Delete();
+ fileH->Delete();
+ reread->Delete();
delete[] imageData;
return 1;
std::cout << "Failed" << std::endl
<< " Pixel areas lengths differ: "
<< size << " # " << dataSizeWritten << std::endl;
- delete fileToBuild;
- delete fileH;
- delete reread;
+ fileToBuild->Delete();
+ fileH->Delete();
+ reread->Delete();
delete[] imageData;
return 1;
}
- // Test the data's content
+ // Test the data content
if ( memcmp(imageData, imageDataWritten, size) !=0 )
{
std::cout << "Failed" << std::endl
<< " Pixel differ (as expanded in memory)." << std::endl;
- delete fileToBuild;
- delete fileH;
- delete reread;
+ std::cout << " list of the first " << MAX_NUMBER_OF_DIFFERENCE
+ << " pixels differing (pos : test - ref) :"
+ << std::endl;
+ unsigned int i;
+ unsigned int j;
+ for(i=0, j=0;i<dataSizeWritten && j<MAX_NUMBER_OF_DIFFERENCE;i++)
+ {
+ if(imageDataWritten[i]!=imageData[i])
+ {
+ std::cout << std::hex << "(" << i << " : "
+ << std::hex << (int)(imageDataWritten[i]) << " - "
+ << std::hex << (int)(imageData[i]) << ") "
+ << std::dec;
+ ++j;
+ }
+ }
+ std::cout << std::endl;
+ fileToBuild->Delete();
+ fileH->Delete();
+ reread->Delete();
delete[] imageData;
return 1;
}
- std::cout << "OK" << std::endl;
-
- delete fileToBuild;
- delete fileH;
- delete reread;
+ fileH->Delete();
+ reread->Delete();
delete[] imageData;
-
return 0;
}
return 1;
}
- gdcm::Debug::DebugOn();
-
+ // gdcm::Debug::DebugOn();
+
int ret=0;
int i=0;
while( Images[i].sizeX>0 && Images[i].sizeY>0 )
{
- std::cout << "Test n :" << i;
+ std::cout << "Test n :" << i <<std::endl;;
ret += WriteSimple(Images[i] );
i++;
+
}
return ret;