1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
/*=========================================================================
Program: GDCM (Grassroots DICOM). A DICOM library
Copyright (c) 2006-2011 Mathieu Malaterre
All rights reserved.
See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include "gdcmDICOMDIRGenerator.h"
#include "gdcmDirectory.h"
#include "gdcmWriter.h"
#include "gdcmTesting.h"
#include "gdcmSystem.h"
#include "gdcmFilenameGenerator.h"
int TestDICOMDIRGenerator1(int argc, char *argv[])
{
(void)argc;
(void)argv;
gdcm::Directory::FilenamesType filenames;
gdcm::Directory::FilenamesType outfilenames;
const char outsubdir[] = "TestDICOMDIRGenerator1";
std::string outtmpdir = gdcm::Testing::GetTempDirectory( outsubdir );
if( !gdcm::System::FileIsDirectory( outtmpdir.c_str() ) )
{
gdcm::System::MakeDirectory( outtmpdir.c_str() );
}
const char subdir[] = "TestImageChangeTransferSyntax4";
std::string directory = gdcm::Testing::GetTempDirectory( subdir );
std::string file0 = std::string(directory) + "/SIEMENS_MAGNETOM-12-MONO2-FileSeq0.dcm";
std::string file1 = std::string(directory) + "/SIEMENS_MAGNETOM-12-MONO2-FileSeq1.dcm";
std::string file2 = std::string(directory) + "/SIEMENS_MAGNETOM-12-MONO2-FileSeq2.dcm";
std::string file3 = std::string(directory) + "/SIEMENS_MAGNETOM-12-MONO2-FileSeq3.dcm";
filenames.push_back( file1 );
filenames.push_back( file3 );
filenames.push_back( file2 );
filenames.push_back( file0 );
size_t nfiles = filenames.size();
gdcm::FilenameGenerator fg;
const char pattern[] = "FILE%03d";
fg.SetPattern( pattern );
fg.SetNumberOfFilenames( nfiles );
if( !fg.Generate() )
{
std::cerr << "Could not generate" << std::endl;
return 1;
}
for( unsigned int i = 0; i < nfiles; ++i )
{
std::string copy = outtmpdir;
copy += "/";
copy += fg.GetFilename( i );
std::cerr << filenames[i] << " -> " << copy << std::endl;
std::ifstream f1(filenames[i].c_str(), std::fstream::binary);
std::ofstream f2(copy.c_str(), std::fstream::binary);
f2 << f1.rdbuf();
outfilenames.push_back( copy );
}
gdcm::DICOMDIRGenerator gen;
gen.SetFilenames( outfilenames );
gen.SetRootDirectory( outtmpdir );
gen.SetDescriptor( "MYDESCRIPTOR" );
if( !gen.Generate() )
{
return 1;
}
gdcm::Writer writer;
writer.SetFile( gen.GetFile() );
std::string outfilename = outtmpdir;
outfilename += "/DICOMDIR";
writer.SetFileName( outfilename.c_str() );
if( !writer.Write() )
{
return 1;
}
return 0;
}
|