X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=Example%2FexOverlaysDCM.cxx;h=956d9ae031af6b9134697989f4a4a2956abe6702;hb=a37b5807e69fba268353479673c3e45fbcc597cb;hp=2a53707686c5edd5d66634de46c669277ca41a84;hpb=704ae81a87e0cb2df1bb86e247a453725d723eb6;p=gdcm.git diff --git a/Example/exOverlaysDCM.cxx b/Example/exOverlaysDCM.cxx index 2a537076..956d9ae0 100755 --- a/Example/exOverlaysDCM.cxx +++ b/Example/exOverlaysDCM.cxx @@ -7,6 +7,8 @@ #include "gdcmArgMgr.h" #include +// Each BIT of Overlay Data (0x6000,0x3000) corresponds +// to a BYTE of overlay image. void explodeByte(unsigned char byte, unsigned char* result) { unsigned char mask = 1; @@ -25,11 +27,11 @@ void explodeByte(unsigned char byte, unsigned char* result) int main(int argc, char *argv[]) { START_USAGE(usage) - " \n exReadOverlays :\n ", - " Extract an overlay image from a secondary capture image ", + " \n exOverlaysDCM :\n ", + " Extract an overlay image from a DICOM image ", " Warning : probably segfaults if no overlay ", - " usage: WriteOverlayImage filein=inputFileName fileout=outputFileName[debug]", - " debug : user wants to run the program in 'debug mode' ", + " usage: exOverlaysDCM filein=inputFileName fileout=outputFileName [debug] ", + " debug : developper wants to run the program in 'debug mode' ", FINISH_USAGE // ----- Initialize Arguments Manager ------ @@ -41,12 +43,31 @@ int main(int argc, char *argv[]) delete am; return 0; } + +/* char *fileName = am->ArgMgrWantString("filein",usage); if ( fileName == NULL ) { delete am; return 0; } +*/ + + + const char *fileName = am->ArgMgrGetString("filein"); + const char *dirName = am->ArgMgrGetString("dirin"); + + if ( (fileName == 0 && dirName == 0) || + (fileName != 0 && dirName != 0) ) + { + std::cerr << std::endl + << "Either 'filein=' or 'dirin=' must be present;" + << std::endl << "Not both" << std::endl; + am->ArgMgrUsage(usage); // Display 'usage' + delete am; + return 1; + } + char *outputFileName = am->ArgMgrWantString("fileout",usage); if ( outputFileName == NULL ) @@ -56,7 +77,10 @@ int main(int argc, char *argv[]) } if (am->ArgMgrDefined("debug")) gdcm::Debug::DebugOn(); - + + if (am->ArgMgrDefined("warning")) + gdcm::Debug::WarningOn(); + // if unused Param we give up if ( am->ArgMgrPrintUnusedLabels() ) { @@ -113,50 +137,57 @@ int main(int argc, char *argv[]) // ============================================================ // Image data generation. // ============================================================ + unsigned int dimX= f->GetXSize(); unsigned int dimY= f->GetYSize(); unsigned int dimXY=dimX*dimY; - std::cout <<"DimX : "<InsertEntryString(temp,0x0028,0x0011); // Columns - sprintf(temp,"%d\0",dimY); - f->InsertEntryString(temp,0x0028,0x0010); // Rows - - f->InsertEntryString("8",0x0028,0x0100); // Bits Allocated - f->InsertEntryString("8",0x0028,0x0101); // Bits Stored - f->InsertEntryString("7",0x0028,0x0102); // High Bit - f->InsertEntryString("0",0x0028,0x0103); // Pixel Representation - f->InsertEntryString("1",0x0028,0x0002); // Samples per Pixel - f->InsertEntryString("MONOCHROME2 ",0x0028,0x0004); - - // We need a gdcm::FileHelper, since we want to load the pixels - gdcm::FileHelper *fh = gdcm::FileHelper::New(f); + sprintf(temp,"%d ",dimX); + f2->InsertEntryString(temp,0x0028,0x0011, "US"); // Columns + sprintf(temp,"%d ",dimY); + f2->InsertEntryString(temp,0x0028,0x0010, "US"); // Rows + + f2->InsertEntryString("8",0x0028,0x0100, "US"); // Bits Allocated + f2->InsertEntryString("8",0x0028,0x0101, "US"); // Bits Stored + f2->InsertEntryString("7",0x0028,0x0102, "US"); // High Bit + f2->InsertEntryString("0",0x0028,0x0103, "US"); // Pixel Representation + f2->InsertEntryString("1",0x0028,0x0002, "US"); // Samples per Pixel + f2->InsertEntryString("MONOCHROME2 ",0x0028,0x0004, "LO"); + + + // feel free to add any field (Dicom Data Entry) you like, here. + // ... + gdcm::FileHelper *fh = gdcm::FileHelper::New(f2); fh->SetImageData(outputData,dimXY); fh->WriteDcmExplVR(outputFileName); std::cout <<"End WriteOverlayImage" << std::endl; delete outputData; - f->Delete(); + f->Delete(); + f2->Delete(); fh->Delete(); + return 0; }