From: jpr Date: Thu, 9 Sep 2004 17:55:40 +0000 (+0000) Subject: Adding some warning messages X-Git-Tag: Version0.6.bp~216 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=770d6ef4630d6243dba1813a75c3dc2f62668a8c;p=gdcm.git Adding some warning messages --- diff --git a/Example/CMakeLists.txt b/Example/CMakeLists.txt index b6ac6f45..791748f3 100644 --- a/Example/CMakeLists.txt +++ b/Example/CMakeLists.txt @@ -52,3 +52,6 @@ TARGET_LINK_LIBRARIES(TestCopyDicom gdcm) ADD_EXECUTABLE(TestChangeHeader TestChangeHeader.cxx) TARGET_LINK_LIBRARIES(TestChangeHeader gdcm) + +ADD_EXECUTABLE(TestReadWriteReadCompare TestReadWriteReadCompare.cxx) +TARGET_LINK_LIBRARIES(TestReadWriteReadCompare gdcm) diff --git a/Example/PrintFile.cxx b/Example/PrintFile.cxx index ad890128..0e780d21 100644 --- a/Example/PrintFile.cxx +++ b/Example/PrintFile.cxx @@ -52,6 +52,14 @@ int main(int argc, char* argv[]) int numberOfScalarComponents=e1->GetNumberOfScalarComponents(); std::cout << " NumberOfScalarComponents " << numberOfScalarComponents <GetEntryByNumber(0x0002,0x0010) == GDCM_NOTLOADED ) { + std::cout << "Transfert Syntax not loaded. " << std::endl + << "Better you increase MAX_SIZE_LOAD_ELEMENT_VALUE" + << std::endl; + return 0; + } + std::string transferSyntaxName = e1->GetTransfertSyntaxName(); std::cout << " TransferSyntaxName= [" << transferSyntaxName << "]" << std::endl; diff --git a/Example/PrintHeader.cxx b/Example/PrintHeader.cxx index 4b12529f..1c3fb8cd 100644 --- a/Example/PrintHeader.cxx +++ b/Example/PrintHeader.cxx @@ -30,7 +30,15 @@ int main(int argc, char* argv[]) e1->Print(); - std::cout << "\n\n" << std::endl; + std::cout << "\n\n" << std::endl; + + if ( e1->GetEntryByNumber(0x0002,0x0010) == GDCM_NOTLOADED ) { + std::cout << "Transfert Syntax not loaded. " << std::endl + << "Better you increase MAX_SIZE_LOAD_ELEMENT_VALUE" + << std::endl; + return 0; + } + std::string transferSyntaxName = e1->GetTransfertSyntaxName(); std::cout << " TransferSyntaxName= [" << transferSyntaxName << "]" << std::endl; @@ -38,7 +46,7 @@ int main(int argc, char* argv[]) && transferSyntaxName != "Explicit VR - Little Endian" && transferSyntaxName != "Deflated Explicit VR - Little Endian" && transferSyntaxName != "Explicit VR - Big Endian" - && transferSyntaxName != "Uncompressed ACR-NEMA" ) + && transferSyntaxName != "Uncompressed ACR-NEMA" ) { std::cout << std::endl << "===========================================" << std::endl; diff --git a/Example/TestReadWriteReadCompare.cxx b/Example/TestReadWriteReadCompare.cxx new file mode 100644 index 00000000..5ea15b8c --- /dev/null +++ b/Example/TestReadWriteReadCompare.cxx @@ -0,0 +1,137 @@ +#include "gdcmHeader.h" +#include "gdcmFile.h" + +//Generated file: +#include "gdcmDataImages.h" + +int main(int argc, char* argv[]) +{ + if (argc) + { + std::cerr << "Test::TestReadWriteReadCompare: Usage: " << argv[0] + << " (no arguments needed)." << std::endl; + } + + std::cout<< "Test::TestReadWriteReadCompare: description " << std::endl; + std::cout << " For all images in gdcmData (and not blacklisted in " + "Test/CMakeLists.txt)" << std::endl; + std::cout << " apply the following multistep test: " << std::endl; + std::cout << " step 1: parse the image (as gdcmHeader) and call" + << " IsReadable(). " << std::endl; + std::cout << " step 2: write the corresponding image in DICOM V3 " + << "with explicit" << std::endl + << " Value Representation in temporary file " + << "TestReadWriteReadCompare.dcm." << std::endl; + std::cout << " step 3: read the image written on step2 and call " + << " IsReadable(). " << std::endl; + std::cout << " step 4: compare (in memory with memcmp) that the two " + << "images " << std::endl + << " match (as expanded by gdcm)." << std::endl; + + int i = 0; + while( gdcmDataImages[i] != 0 ) + { + std::string filename = GDCM_DATA_ROOT; + filename += "/"; + filename += gdcmDataImages[i++]; + + std::cout << " Testing: " << filename << std::endl; + + //////////////// Step 1 (see above description): + + gdcmHeader *header = new gdcmHeader( filename ); + if( !header->IsReadable() ) + { + std::cerr << "Test::TestReadWriteReadCompare: Image not gdcm compatible:" + << filename << std::endl; + delete header; + return 1; + } + std::cout << " step 1 ..."; + + //////////////// Step 2: + + gdcmFile* file = new gdcmFile( header ); + int dataSize = file->GetImageDataSize(); + void* imageData = file->GetImageData(); //EXTREMELY IMPORTANT + // Sure, it is : It's up to the user to decide if he wants to + // GetImageData or if he wants to GetImageDataRaw + // (even if we do it by setting a flag, he will have to decide) + + /// \todo Following line commented out because gdcmFile::SetImageData() is + /// brain dead: it sets ImageDataSize to its argument and PixelRead to a. + /// Later on, when writing gdcmFile::WriteBase() + /// and because PixelRead == 1 we call + /// PixelElement->SetLength( ImageDataSizeRaw ); + /// where we use ImageDataSizeRAW instead of ImageDataSize ! + /// But when the original image made the transformation LUT -> RGB, + /// ImageDataSizeRaw is the third of ImageDataSize, and there is no + /// reason (since we called gdcmFile::SetImageData) to use the Raw image + /// size... This "bug" in gdcmFile made that we had to black list + /// images 8BitsUncompressedColor.dcm, OT-PAL-8-face.dcm and + /// US-PAL-8-10x-echo.dcm... + /// In conclusion fix gdcmFile, and then uncomment the following line. + + // --> I did. ctest doesn't break. But ... is it enought to say it's OK ? + + file->SetImageData(imageData, dataSize); + + file->WriteDcmExplVR( "TestReadWriteReadCompare.dcm" ); + std::cout << "2..."; + + //////////////// Step 3: + + gdcmFile* reread = new gdcmFile( "TestReadWriteReadCompare.dcm" ); + if( !reread->GetHeader()->IsReadable() ) + { + std::cerr << "Test::TestReadWriteReadCompare: Could not reread image " + << "written:" << filename << std::endl; + delete header; + delete file; + delete reread; + return 1; + } + std::cout << "3..."; + // For the next step: + int dataSizeWritten = reread->GetImageDataSize(); + void* imageDataWritten = reread->GetImageData(); + + //////////////// Step 4: + + if (dataSize != dataSizeWritten) + { + std::cout << std::endl + << " Pixel areas lengths differ: " + << dataSize << " # " << dataSizeWritten << std::endl; + delete (char*)imageData; + delete (char*)imageDataWritten; + delete header; + delete file; + delete reread; + return 1; + } + + if (int res = memcmp(imageData, imageDataWritten, dataSize) !=0) + { + (void)res; + std::cout << std::endl + << " Pixel differ (as expanded in memory)." << std::endl; + delete (char*)imageData; + delete (char*)imageDataWritten; + delete header; + delete file; + delete reread; + return 1; + } + std::cout << "4...OK." << std::endl ; + + //////////////// Clean up: + delete (char*)imageData; + delete (char*)imageDataWritten; + delete header; + delete file; + delete reread; + } + + return 0; +}