X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmFileHelper.cxx;h=341a140b1427c0f22fd3fd02ffa430ddcb873464;hb=3b55960a8c7952d04a6a65519cee4d60ff40321d;hp=1b454c60de9f0534104818aa9eadddb932910319;hpb=1d9ac5cec02b9daa18b16835882b531731b125ad;p=gdcm.git diff --git a/src/gdcmFileHelper.cxx b/src/gdcmFileHelper.cxx index 1b454c60..341a140b 100644 --- a/src/gdcmFileHelper.cxx +++ b/src/gdcmFileHelper.cxx @@ -4,8 +4,8 @@ Module: $RCSfile: gdcmFileHelper.cxx,v $ Language: C++ - Date: $Date: 2005/10/18 12:58:28 $ - Version: $Revision: 1.62 $ + Date: $Date: 2005/10/21 12:06:06 $ + Version: $Revision: 1.67 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -708,6 +708,10 @@ bool FileHelper::Write(std::string const &fileName) SetWriteFileTypeToACR(); // SetWriteFileTypeToImplicitVR(); // ACR IS implicit VR ! break; + case JPEG: + SetWriteFileTypeToJPEG(); + std::cerr << "Writting as JPEG" << std::endl; + break; } CheckMandatoryElements(); @@ -741,6 +745,7 @@ bool FileHelper::Write(std::string const &fileName) } bool check = CheckWriteIntegrity(); // verifies length + if (WriteType == JPEG ) check = true; if (check) { check = FileInternal->Write(fileName,WriteType); @@ -1011,6 +1016,17 @@ void FileHelper::SetWriteFileTypeToACR() /** * \brief Sets in the File the TransferSyntax to 'Explicit VR Little Endian" */ +void FileHelper::SetWriteFileTypeToJPEG() +{ + std::string ts = Util::DicomString( + Global::GetTS()->GetSpecialTransferSyntax(TS::JPEGBaselineProcess1) ); + + DataEntry *tss = CopyDataEntry(0x0002,0x0010); + tss->SetString(ts); + + Archive->Push(tss); +} + void FileHelper::SetWriteFileTypeToExplicitVR() { std::string ts = Util::DicomString( @@ -1166,6 +1182,8 @@ DataEntry *FileHelper::CopyDataEntry(uint16_t group, uint16_t elem, void FileHelper::CheckMandatoryElements() { + std::string sop = Util::CreateUniqueUID(); + // just to remember : 'official' 0002 group if ( WriteType != ACR && WriteType != ACR_LIBIDO ) { @@ -1193,13 +1211,13 @@ void FileHelper::CheckMandatoryElements() e_0002_0001->SetLength(2); Archive->Push(e_0002_0001); - // 'Media Stored SOP Class UID' - // [Secondary Capture Image Storage] - CopyMandatoryEntry(0x0002,0x0002,"1.2.840.10008.5.1.4.1.1.7"); + // Potentialy post-processed image --> [Secondary Capture Image Storage] + // 'Media Storage SOP Class UID' + CopyMandatoryEntry(0x0002,0x0002,"1.2.840.10008.5.1.4.1.1.7"); - // 'Media Stored SOP Instance UID' - CopyMandatoryEntry(0x0002,0x0003,Util::CreateUniqueUID()); - + // 'Media Storage SOP Instance UID' + CopyMandatoryEntry(0x0002,0x0003,sop); + // 'Implementation Class UID' CopyMandatoryEntry(0x0002,0x0012,Util::CreateUniqueUID()); @@ -1292,20 +1310,21 @@ void FileHelper::CheckMandatoryElements() // 'Image Type' (The written image is no longer an 'ORIGINAL' one) CopyMandatoryEntry(0x0008,0x0008,"DERIVED\\PRIMARY"); - } - else - { - // There was no 'SOP Class UID'. - // the source image was NOT a true Dicom one. - // We consider the image is a 'Secondary Capture' one - // SOP Class UID - // [Secondary Capture Image Storage] - SetMandatoryEntry(0x0008,0x0016,"1.2.840.10008.5.1.4.1.1.7"); } + // At the end, not to overwrite the original ones, + // needed by 'Referenced SOP Instance UID', 'Referenced SOP Class UID' + // 'SOP Instance UID' + CopyMandatoryEntry(0x0008,0x0018,sop); + + // whether a 'SOP Class UID' already exists or not in the original image + // the gdcm written image *is* a [Secondary Capture Image Storage] ! + // 'SOP Class UID' : [Secondary Capture Image Storage] + CopyMandatoryEntry(0x0008,0x0016,"1.2.840.10008.5.1.4.1.1.7"); + // ---- The user will never have to take any action on the following ----. // new value for 'SOP Instance UID' - SetMandatoryEntry(0x0008,0x0018,Util::CreateUniqueUID()); + //SetMandatoryEntry(0x0008,0x0018,Util::CreateUniqueUID()); // Instance Creation Date CopyMandatoryEntry(0x0008,0x0012,Util::GetCurrentDate().c_str()); @@ -1320,14 +1339,6 @@ void FileHelper::CheckMandatoryElements() // Entries whose type is 2c are mandatory-inside-a-Sequence // Entries whose type is 3 are optional - // 'Serie Instance UID' - // Keep the value if exists - // The user is allowed to create his own Series, - // keeping the same 'Serie Instance UID' for various images - // The user shouldn't add any image to a 'Manufacturer Serie' - // but there is no way no to allowed him to do that - CheckMandatoryEntry(0x0020,0x000e,Util::CreateUniqueUID()); - // 'Study Instance UID' // Keep the value if exists // The user is allowed to create his own Study, @@ -1336,6 +1347,14 @@ void FileHelper::CheckMandatoryElements() // adding new series to an already existing Study CheckMandatoryEntry(0x0020,0x000d,Util::CreateUniqueUID()); + // 'Serie Instance UID' + // Keep the value if exists + // The user is allowed to create his own Series, + // keeping the same 'Serie Instance UID' for various images + // The user shouldn't add any image to a 'Manufacturer Serie' + // but there is no way no to allowed him to do that + CheckMandatoryEntry(0x0020,0x000e,Util::CreateUniqueUID()); + // Modality : if missing we set it to 'OTher' CheckMandatoryEntry(0x0008,0x0060,"OT");