Program: gdcm
Module: $RCSfile: ReWrite.cxx,v $
Language: C++
- Date: $Date: 2005/06/14 09:04:59 $
- Version: $Revision: 1.5 $
+ Date: $Date: 2005/10/25 14:52:27 $
+ Version: $Revision: 1.15 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
" \n ReWrite :\n",
" Re write a full gdcm-readable Dicom image ",
" (usefull when the file header is not very straight). ",
- "",
+ " ",
" usage: ReWrite filein=inputFileName fileout=anonymizedFileName ",
" [mode=write mode] [noshadow] [noseq][debug] ",
+ " ",
" mode = a (ACR), x (Explicit VR Dicom), r (RAW : only pixels) ",
+ " noshadowseq: user doesn't want to load Private Sequences ",
" noshadow : user doesn't want to load Private groups (odd number)",
" noseq : user doesn't want to load Sequences ",
" rgb : user wants to tranform LUT (if any) to RGB pixels ",
// ----- Initialize Arguments Manager ------
gdcm::ArgMgr *am = new gdcm::ArgMgr(argc, argv);
- if (am->ArgMgrDefined("usage"))
+ if (argc == 1 || am->ArgMgrDefined("usage"))
{
am->ArgMgrUsage(usage); // Display 'usage'
delete am;
char *fileName = am->ArgMgrWantString("filein",usage);
if ( fileName == NULL )
{
+ std::cout << "'filein= ...' is mandatory" << std::endl;
delete am;
return 0;
}
char *outputFileName = am->ArgMgrWantString("fileout",usage);
if ( outputFileName == NULL )
{
+ std::cout << "'fileout= ...' is mandatory" << std::endl;
delete am;
return 0;
}
char *mode = am->ArgMgrGetString("mode",(char *)"X");
- int loadMode;
- if ( am->ArgMgrDefined("noshadow") && am->ArgMgrDefined("noseq") )
- loadMode = NO_SEQ | NO_SHADOW;
- else if ( am->ArgMgrDefined("noshadow") )
- loadMode = NO_SHADOW;
- else if ( am->ArgMgrDefined("noseq") )
- loadMode = NO_SEQ;
- else
- loadMode = 0;
+ int loadMode = gdcm::LD_ALL;
+ if ( am->ArgMgrDefined("noshadowseq") )
+ loadMode |= gdcm::LD_NOSHADOWSEQ;
+ else
+ {
+ if ( am->ArgMgrDefined("noshadow") )
+ loadMode |= gdcm::LD_NOSHADOW;
+ if ( am->ArgMgrDefined("noseq") )
+ loadMode |= gdcm::LD_NOSEQ;
+ }
bool rgb = ( 0 != am->ArgMgrDefined("RGB") );
// ----------- End Arguments Manager ---------
- gdcm::File *e1 = new gdcm::File();
- e1->SetLoadMode(loadMode);
-
- bool res = e1->Load( fileName );
+ gdcm::File *f = gdcm::File::New();
+ f->SetLoadMode( loadMode );
+ f->SetFileName( fileName );
+ bool res = f->Load();
if ( !res )
{
- delete e1;
- delete am;
+ f->Delete();
return 0;
}
- if (!e1->IsReadable())
+ if (!f->IsReadable())
{
std::cerr << "Sorry, not a Readable DICOM / ACR File" <<std::endl;
- delete e1;
- delete am;
+ f->Delete();
return 0;
}
- gdcm::FileHelper *f1 = new gdcm::FileHelper(e1);
- void *imageData;
+ gdcm::FileHelper *fh = gdcm::FileHelper::New(f);
+ void *imageData;
int dataSize;
if (rgb)
{
- dataSize = f1->GetImageDataSize();
- imageData = f1->GetImageData(); // somewhat important... can't remember
- f1->SetWriteModeToRGB();
+ dataSize = fh->GetImageDataSize();
+ imageData = fh->GetImageData(); // somewhat important... can't remember
+ fh->SetWriteModeToRGB();
}
else
{
- dataSize = f1->GetImageDataRawSize();
- imageData = f1->GetImageDataRaw();
- f1->SetWriteModeToRaw();
+ dataSize = fh->GetImageDataRawSize();
+ imageData = fh->GetImageDataRaw();// somewhat important... can't remember
+ fh->SetWriteModeToRaw();
}
+ if ( imageData == 0 ) // to avoid warning
+ {
+ std::cout << "Was unable to read pixels " << std::endl;
+ }
std::cout <<std::endl <<" dataSize " << dataSize << std::endl;
int nX,nY,nZ,sPP,planarConfig;
std::string pixelType, transferSyntaxName;
- nX=e1->GetXSize();
- nY=e1->GetYSize();
- nZ=e1->GetZSize();
+ nX=f->GetXSize();
+ nY=f->GetYSize();
+ nZ=f->GetZSize();
std::cout << " DIMX=" << nX << " DIMY=" << nY << " DIMZ=" << nZ << std::endl;
- pixelType = e1->GetPixelType();
- sPP = e1->GetSamplesPerPixel();
- planarConfig = e1->GetPlanarConfiguration();
+ pixelType = f->GetPixelType();
+ sPP = f->GetSamplesPerPixel();
+ planarConfig = f->GetPlanarConfiguration();
std::cout << " pixelType=" << pixelType
<< " SampleserPixel=" << sPP
<< " PlanarConfiguration=" << planarConfig
<< " PhotometricInterpretation="
- << e1->GetEntryValue(0x0028,0x0004)
+ << f->GetEntryString(0x0028,0x0004)
<< std::endl;
- int numberOfScalarComponents=e1->GetNumberOfScalarComponents();
- std::cout << "NumberOfScalarComponents " << numberOfScalarComponents <<std::endl;
- transferSyntaxName = e1->GetTransferSyntaxName();
- std::cout << " TransferSyntaxName= [" << transferSyntaxName << "]" << std::endl;
+ int numberOfScalarComponents=f->GetNumberOfScalarComponents();
+ std::cout << "NumberOfScalarComponents " << numberOfScalarComponents
+ <<std::endl;
+ transferSyntaxName = f->GetTransferSyntaxName();
+ std::cout << " TransferSyntaxName= [" << transferSyntaxName << "]"
+ << std::endl;
switch (mode[0])
{
- case 'A' :
- case 'a' :
- // Writting an ACR file
- // from a full gdcm readable File
-
- std::cout << "WriteACR" << std::endl;
- f1->WriteAcr(outputFileName);
- break;
-
- case 'D' : // Not documented in the 'usage', because the method is known to be bugged.
- case 'd' :
- // Writting a DICOM Implicit VR file
- // from a full gdcm readable File
-
- std::cout << "WriteDCM Implicit VR" << std::endl;
- f1->WriteDcmImplVR(outputFileName);
- break;
-
- case 'X' :
- case 'x' :
- // writting a DICOM Explicit VR
- // from a full gdcm readable File
-
- std::cout << "WriteDCM Explicit VR" << std::endl;
- f1->WriteDcmExplVR(outputFileName);
- break;
-
- case 'R' :
- case 'r' :
- // Writting a Raw File,
-
- std::cout << "WriteRaw" << std::endl;
- f1->WriteRawData(outputFileName);
- break;
-
+ case 'A' :
+ case 'a' :
+ // Writting an ACR file
+ // from a full gdcm readable File
+ std::cout << "WriteACR" << std::endl;
+ fh->WriteAcr(outputFileName);
+ break;
+
+ case 'D' : // Not documented in the 'usage', because the method
+ case 'd' : // is known to be bugged.
+ // Writting a DICOM Implicit VR file
+ // from a full gdcm readable File
+ std::cout << "WriteDCM Implicit VR" << std::endl;
+ fh->WriteDcmImplVR(outputFileName);
+ break;
+
+ case 'X' :
+ case 'x' :
+ // writting a DICOM Explicit VR
+ // from a full gdcm readable File
+ std::cout << "WriteDCM Explicit VR" << std::endl;
+ // fh->WriteDcmExplVR(outputFileName);
+ // Try this one :
+ fh->SetWriteTypeToDcmExplVR();
+ fh->Write(outputFileName);
+ break;
+
+ case 'R' :
+ case 'r' :
+ // Writting a Raw File,
+ std::cout << "WriteRaw" << std::endl;
+ fh->WriteRawData(outputFileName);
+ break;
+
+ // Just for fun :
+ // Write a 'Video inverse' version of the file.
+ // *Not* described, on purpose, in the USAGE
+ case 'V' :
+ case 'v' :
+ if ( fh->GetFile()->GetBitsAllocated() == 8)
+ {
+ std::cout << "videoinv for 8 bits" << std::endl;
+ for (int i=0; i<dataSize; i++)
+ {
+ ((uint8_t*)imageData)[i] = 255 - ((uint8_t*)imageData)[i];
+ }
+ }
+ else
+ {
+ std::cout << "videoinv for 16 bits" << std::endl;
+ for (int i=0; i<dataSize/2; i++)
+ {
+ ((uint16_t*)imageData)[i] = 65535 - ((uint16_t*)imageData)[i];
+ }
+ }
+ std::cout << "WriteDCM Explicit VR + VideoInv" << std::endl;
+ fh->WriteDcmExplVR(outputFileName);
+ break;
}
- delete e1;
- delete f1;
+
+ f->Delete();
+ fh->Delete();
return 0;
}